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 字节)。在这种情况下,没有空间可以对“无需填充”的信息进行编码。因此,必须添加一个仅包含填充数据的附加密码块。

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

于 2012-05-15T14:46:13.133 回答