2012-11-06 21 views
2

我看过this线程,而且那里提到的加密技术运行良好。但不是所有情况。在UIImage上的Iphone加密 - 在AES 256加密上的kCCBufferTooSmall错误

要求:

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

我做了什么

从上面提到的线程,我发现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. 如果第一个问题的答案是YES,那么在iphone中使用什么样的 加密算法,对图像进行加密(大概是 大)?
  3. 如果第一个问题的答案是,那么为什么会出现这个错误?

回答

1
  1. 不,不是真的。一些哈希函数确实有最大值,但是更多的是2^64的顺序,所以一般情况下你不必担心。
  2. N/A
  3. 它有可能是一些与malloc呼叫组合做的dataWithBytesNoCopy,但很难找出不实际运行的代码。

请注意,包装是非常braindead,因为它确实需要一次加密,而不使用CCCryptorUpdate。它不使用危及安全的IV。它将字符串作为键来处理。最后,它会为解密创建一个太大的缓冲区大小。你最好使用更可靠的来源创建自己的。

+0

对不起,对于迟到的答案,但我没有任何iOS设备来测试。 –