使用CCCrypt进行解密会返回错误缓冲区长度的kCCSuccess

时间:2013-03-20 14:07:42

标签: ios encryption commoncrypto

我有一个加密的数据流(AES 128,CBC,PKCS7),我试图在它到达时解密。偶尔我会得到一个长度为334的数据包,然后我尝试解密。当我在iPhone 5上执行此操作时,它会返回kCCBufferTooSmall(非mod 16数据的预期值)。但是,当我在iPhone 3GS上拥有相同的东西时,它返回kCCSuccess并给我一个部分解密的流(它给我的333的最后十个字节左右是伪造的 - 空终结符和随机数据)。 / p>

这两款设备均为iOS 6.1.2。该应用程序使用基本SDK设置为最新的SDK(6.1),部署目标为iOS 5.0。

我创建了以下测试用例,其中也出现了这个问题:

+ (void)decryptionTest {
    NSData *data = [NSMutableData dataWithLength:334]; // 334 % 16 = 14
    NSData *key = [NSMutableData dataWithLength:kCCKeySizeAES128];
    NSData *iv = [NSMutableData dataWithLength:kCCBlockSizeAES128];
    size_t outLength = 0;
    NSMutableData *cipherData = [NSMutableData dataWithLength:data.length];

    CCCryptorStatus result = CCCrypt(kCCDecrypt,
                                     kCCAlgorithmAES128,
                                     kCCOptionPKCS7Padding,
                                     key.bytes,
                                     key.length,
                                     iv.bytes,
                                     data.bytes,
                                     data.length,
                                     cipherData.mutableBytes,
                                     cipherData.length,
                                     &outLength);

    NSLog(@"result = %d", result);
}

为什么我会因为不匹配块大小而导致kCCSuccess失败?

0 个答案:

没有答案