我看过这个帖子,那里提到的加密技术运行良好。但并非在所有情况下。
要求:
很简单,拍摄一张图像,对其进行加密,然后存储加密数据。稍后,获取加密数据,对其进行解密,重新创建原始图像并显示。
我做了什么
从上面提到的线程中,我发现NSData 添加了 AES 256 加密。我尝试使用它,但取得了部分成功。这是代码
//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 中使用什么样的加密算法来加密图像(可能是大的)?
- 如果第一个问题的答案是NO,那么为什么会出现这个错误?