5

暗号化されたデータ ストリーム (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ブロックサイズが一致しないために失敗するはずのときに、なぜ取得するのですか?

4

0 に答える 0