我有一个加密的数据流(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
失败?