AES加密输出长度

Dis*_*ame 0 java encryption aes

我正在运行这个用于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());
Run Code Online (Sandbox Code Playgroud)

我总是得到一个48字节的输出,但我有一个期望32字节输入的遗留系统.如何控制输出长度?

注意:我必须使用AES CBC

Rob*_*ert 5

由于您使用的填充,您将获得32 + 16字节.

通常,填充仅填充剩余的字节,直到下一个密码块已满.但在你的情况下,明文使用了2个块(2*16字节).在这种情况下,没有剩余空间来编码信息"无需填充".因此,必须添加仅包含填充数据的一个附加密码块.

可能是遗留系统不使用填充.尝试"AES/CBC/NoPadding".