UIImage 上的 Iphone 加密 - AES 256 加密时出现 kCCBufferTooSmall 错误

标签 iphone encryption uiimage aes nsdata

我见过this线程,并且那里提到的加密技术运行良好。但并非在所有情况下都如此。

要求:

很简单,拍摄一张图像,对其进行加密,然后存储加密的数据。之后,获取加密数据,解密,重新创建原始图像并显示。

我做了什么

从上面提到的线程中,我找到了 NSData additions for AES 256 encryption 。我尝试使用它,但取得了部分成功。这是代码

//encryption
NSData *srcData       =   UIImageJPEGRepresentation(srcImage, 1.0);
NSLog(@"srcData length : %d",[srcData length]);
NSData *encryptedData =   [srcData AES256EncryptWithKey:KEY];
NSLog(@"encrypted data length : %d",[encryptedData length]);

........

//later..
//decryption
decryptedImage  =   [UIImage imageWithData:[encryptedData AES256DecryptWithKey:KEY]];
imageView.image =   decryptedImage;

发生了什么

对于小图像,例如分辨率为 48*48 的图像,此代码可以成功运行。但是,当我在更高分辨率的图像(例如 256 * 256)中运行代码时,方法 AES256EncryptWithKey 失败,并出现错误 kCCBufferTooSmall (-4301)。

问题

  1. AES 256 对有效负载的大小(以字节为单位)是否有任何限制 要加密吗?
  2. 如果第一个问题的答案是,那么什么样的 iPhone中使用的加密算法,用于加密图像(可能是 大的)?
  3. 如果第一个问题的答案是,那么为什么会出现此错误?

最佳答案

  1. 不,不是真的。有些哈希函数确实有最大值,但更多的是 2^64 的量级,所以一般情况下您不必担心。
  2. 不适用
  3. 这可能与 dataWithBytesNoCopymalloc 调用的结合有关,但如果不实际运行代码,很难找出答案。

请注意,该包装器非常愚蠢,因为它确实需要一次加密所有内容,而不使用CCCryptorUpdate。它不使用危及安全的 IV。它将键作为字符串处理。最后,它为解密创建了太大的缓冲区。您最好使用更可靠的来源来创建自己的。

关于UIImage 上的 Iphone 加密 - AES 256 加密时出现 kCCBufferTooSmall 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13248786/

相关文章:

javascript - 加密后无法解密回来

java - 填充加密的 key 长度不正确

ios - 绘制文本并添加到 UIImage iOS 5/6

iphone - 为 AR 应用程序创建 3D 模型

ios - 如何让 HLS 从头开始

java - BouncyCaSTLe 和 SunJCE 在 Cipher::update 和 Cipher::doFInal 中的不同结果

objective-c - 将 UITableViewCell 与背景混合

ios - 我不想在 CIFilter 的 CIGaussianBlur 中扩展

iphone - UIButton setBackgroundImage 占用大量内存

iphone - IBOutlets 使用的内存是如何管理的?