2

私の知る限り、CFB8モードのブロックサイズは1バイトです。したがって、IV も 1 バイト長であることがわかります。ただし、暗号化および復号化関数の共通暗号作成関数に 1 バイトの同じ iv を渡すテストを行うと、暗号化されたメッセージと復号化されたメッセージが一致しません。

したがって、API は IV として使用するために 1 バイト以上を取るべきだったと思います。なぜ知りたいのですか?私の理解に何か問題がありますか?

CCCryptorStatus result = CCCryptorCreateWithMode(operation,
                                                 kCCModeCFB8,
                                                 kCCAlgorithmAES128,
                                                 ccNoPadding,
                                                 iv.bytes,
                                                 key.bytes,
                                                 key.length,
                                                 NULL,
                                                 0,
                                                 0,
                                                 0,
                                                 &_cryptor);

if (result == kCCSuccess)
    result = CCCryptorUpdate(_cryptor,
                             data.bytes,
                             data.length,
                             cipherData.mutableBytes,
                             cipherData.length,
                             &outLength);

if (result == kCCSuccess)
    result = CCCryptorFinal(_cryptor,
                            cipherData.mutableBytes,
                            cipherData.length,
                            &outLength);

if (result == kCCSuccess)
    result = CCCryptorRelease(_cryptor);
4

2 に答える 2

4

IV サイズは、対称アルゴリズムのブロック サイズと一致する必要があります。したがって、AES の場合、IV は 16 バイトである必要があります。

CFB-8 のシフト サイズは 1 バイトです。暗号のブロックサイズとは関係ありません。

于 2013-01-30T09:34:36.210 に答える
3

ブロックサイズが 1 バイトではなく、1 バイトごとに再同期されるだけです。IV は実際には 16 バイトです (AES の場合)。

于 2013-01-30T09:34:32.560 に答える