1. ホーム
  2. java

AES/CBC暗号化、AES/ECB暗号化後のデータサイズ

2023-10-19 23:46:04

質問

AES暗号化後のデータのサイズを知りたいのですが、主にサイズを知るためにAES暗号化後のデータ(ディスクやメモリ上)をバッファリングしないようにするためです。

私は128ビットAESを使用し javax.crypto.Cipherjavax.crypto.CipherInputStream で暗号化します。

様々な入力サイズでいくつかのテストを行った結果、以下のように計算された暗号化後のサイズは正しいことがわかりました。

long size = input_Size_In_Bytes; 
long post_AES_Size = size + (16 - (size % 16));

しかし、上記の式がすべての可能な入力サイズに適用されるかどうかはわかりません。

暗号化されたデータ(ディスクまたはメモリ)をバッファリングすることなく、AES暗号化適用後のデータサイズを事前に計算する方法はありますか。

どのように解決するのですか?

AESは鍵のサイズに関係なく、ブロックサイズは16バイト固定です。PKCS 5/7のパディングを使用すると仮定して、以下の計算式を使用します。

 cipherLen = (clearLen/16 + 1) * 16;

クリアテキストがブロックサイズの倍数である場合、パディングのために全く新しいブロックが必要であることに注意してください。例えば、クリアテキストが16バイトだとします。暗号文は32バイトになります。

IV (Initial Vector) を暗号文と一緒に保存したい場合があります。その場合、IVのためにさらに16バイト追加する必要があります。