6

パディングなしでCFBモードでAESを使用してファイルから読み取り、データを暗号化しようとしています

AES/CFB/NoPadding」。IV の長さは 16 バイトです。

デフォルトで AES が 16 バイト ブロックで動作することを考えると、CBC や CFB 以外のモードを使用している場合は、パディング スキームを使用することを考えたでしょう。CFB では、基本的にプレーンテキストのパディングは必要ありません。

問題は、ファイルに 16 バイト未満のデータが含まれている場合、何も暗号化されないことです。16 バイトを超える場合は、最初の 16 バイトのみが暗号化されます。

これは、ブロック サイズが増加していることを明確に示しており、ブロック サイズに対してバイトのアンダーフローまたはオーバーフローが発生した場合、そのデータ/バイトは破棄されます。

私が理解していないのは、CFBを使用している間、データをパディングする必要がないということです..そうです! では、なぜ AES の 16 バイトのデフォルト ブロック サイズが機能し、データが切り捨てられるのでしょうか?

4

1 に答える 1

4

そのモードでフィードバックするビット数を指定できなかったため、デフォルトの 128 ビットを取得しています。8 ビットが必要なようです。そのためには、getInstance() に次の引数を使用する必要があります。

Cipher.getInstance("AES/CFB8/NoPadding");
于 2012-06-14T10:34:37.237 に答える