暗号化されたデータ ストリーム (AES 128、CBC、PKCS7) が届いたときに復号化しようとしています。時折、長さ 334 のパケットを受け取り、それを解読しようとします。iPhone 5 でこれを行うと、返されますkCCBufferTooSmall
(これは mod 16 以外のデータで予想されます)。ただし、iPhone 3GS で同じものを使用するkCCSuccess
と、部分的に復号化されたストリームが返されて返されます (333 の最後の 10 バイト程度は偽物です - null ターミネータとランダム データ)。
どちらのデバイスも 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
ブロックサイズが一致しないために失敗するはずのときに、なぜ取得するのですか?