1

AES 暗号化用に次の Java コードを実行しています。

byte[] iv = new byte[16];

SecretKey aesKey = new SecretKeySpec("hex key here", "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, aesKey, new IvParameterSpec(iv));

return cipher.doFinal("32 characters here ...".getBytes());

私は常に 48 バイトの出力を取得していますが、32 バイトの入力を想定しているレガシー システムを使用しています。出力の長さはどのように制御できますか?

注: AES CBC を使用する必要があります

4

1 に答える 1

5

使用しているパディングのために、32 + 16 バイトを取得しています。

通常、パディングは、次の暗号ブロックがいっぱいになるまで残りのバイトを埋めるだけです。しかし、あなたの場合、平文はすでに 2 ブロック (2 * 16 バイト) を使用しています。このような場合、「パディングは不要」という情報をエンコードするためのスペースが残っていません。したがって、パディング データのみを含む暗号ブロックを 1 つ追加する必要があります。

従来のシステムではパディングが使用されていない可能性があります。"AES/CBC/NoPadding"を試してください。

于 2012-05-15T14:46:13.133 に答える