AES加密输出长度

时间:2012-05-14 14:30:44

标签: 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());

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

注意:我必须使用AES CBC

1 个答案:

答案 0 :(得分:5)

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

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

可能是遗留系统不使用填充。尝试“AES / CBC / NoPadding”