我见过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)。
问题
- AES 256 对有效负载的大小(以字节为单位)是否有任何限制 要加密吗?
- 如果第一个问题的答案是是,那么什么样的 iPhone中使用的加密算法,用于加密图像(可能是 大的)?
- 如果第一个问题的答案是否,那么为什么会出现此错误?
最佳答案
- 不,不是真的。有些哈希函数确实有最大值,但更多的是 2^64 的量级,所以一般情况下您不必担心。
- 不适用
- 这可能与
dataWithBytesNoCopy
与malloc
调用的结合有关,但如果不实际运行代码,很难找出答案。
请注意,该包装器非常愚蠢,因为它确实需要一次加密所有内容,而不使用CCCryptorUpdate
。它不使用危及安全的 IV。它将键作为字符串处理。最后,它为解密创建了太大的缓冲区。您最好使用更可靠的来源来创建自己的。
关于UIImage 上的 Iphone 加密 - AES 256 加密时出现 kCCBufferTooSmall 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13248786/