【问题标题】:Iphone Encryption on UIImage - kCCBufferTooSmall error on AES 256 encryptionUIImage 上的 Iphone 加密 - AES 256 加密上的 kCCBufferTooSmall 错误
【发布时间】:2012-10-26 06:33:36
【问题描述】:

我见过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. 如果第一个问题的答案是YES,那么什么样的 在 iphone 中使用的加密算法,用于加密图像(可能 大的)?
  3. 如果第一个问题的答案是NO,那么为什么会出现这个错误?

【问题讨论】:

    标签: iphone encryption uiimage aes nsdata


    【解决方案1】:
    1. 不,不是。一些哈希函数确实有一个最大值,但更多的是 2^64 的数量级,所以通常你不必担心。
    2. 不适用
    3. 这可能与 dataWithBytesNoCopymalloc 调用的结合有关,但如果不实际运行代码就很难找到。

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

    【讨论】:

    • 很抱歉回答晚了,但我没有任何 iOS 设备可以测试这个。
    猜你喜欢
    • 2018-07-08
    • 2011-04-28
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多