【问题标题】:Base64 in iPhone returning different result than other toolsiPhone中的Base64返回与其他工具不同的结果
【发布时间】:2012-03-23 22:21:31
【问题描述】:

我正在尝试对图像进行 base64 编码以在 iOS 上上传,但愚蠢的事情没有内置支持,所以我下载了两个库并尝试了它们,但我认为它们返回了错误的值 (除非我对 base64 的理解比我想象的还要少)。 This 网站返回一个以此开头的长字符串:/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAKAA 当我使用我下载的library 加密时,它以这样的开头:iVBORw0KGgoAAAANSUhEUgAAAI0AAABnCAIAAACy41YWAABAAElEQVR4AbzdeaylyXUY9nf3 我 100% 确定第一个是正确的,因为当我使用为测试服务器而编写的测试程序时,它上传到服务器的代码与服务器愉快地解码文件并保存图像的代码相同。 Here 是测试图片。

基本上,我的想法是我需要为 iPhone / iPad 获取不同的库。我注意到的另一件奇怪的事情是,对于某些图像,= 将位于字符串的末尾,而对于其他图像则不会。我可以想到三个原因。

1) iPhone 内存不足,不想告诉我,所以它只是上传它所拥有的。

2) 图书馆坏了

3) 我很困惑,不懂base64

有什么建议吗?

编辑:iPhone实际上是模拟器,所以我不知道它是否会在计算机之前耗尽内存。我知道android模拟器没有,但我不确定iOS模拟器。

【问题讨论】:

  • 你的意思是编码,而不是加密。

标签: iphone ios ipad base64


【解决方案1】:

iPhone 输出似乎映射到每个标准 base64 解码(例如 this one)的 PNG 开头。您提供的另一个选项(我将其修剪为 '/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK' 以作为有效的 base64 长度)以 FFD8(JPEG SOI 标记)开头,然后包含文本 Exif,所以我愿意说是 JPEG。

您是否可能无意中对不同的文件进行了编码以进行比较?

哦,顺便提一下,如果它可以帮助您测试您的工作 - iPhone 内置了 base 64 解码,但不是很明显。诀窍是创建一个基于 64 位编码的数据 url,并要求 NSData 加载它。例如

NSData *decodedData = [NSData dataWithContentsOfURL:
     [NSURL URLWithString:
         @"data:;base64,/9j/4Q+zRXhpZgAASUkqAAgAAAAKAA4BAgAgAAAAhgAAAA8BAgAFAAAApgAAABABAgAK"]];

data:;base64, 后面直接跟您的 base64 数据。


三年后的补充:由于iOS 7 NSData 直接提供了-initWithBase64EncodedString:options:,所以不再需要制定数据URL。

【讨论】:

  • 谢谢,我从来没想过。我将数据作为 PNG 表示形式获取,即使它是 jpeg 图像。我改用 jpeg 格式,现在效果很好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 2019-12-27
  • 2015-08-13
相关资源
最近更新 更多