我正在运行这个用于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
答案 0 :(得分:5)
由于您使用的填充,您获得的是32 + 16字节。
通常填充仅填充剩余的字节,直到下一个密码块已满。但在你的情况下,明文使用了2个块(2 * 16字节)。在这种情况下,没有剩余空间来编码信息“无需填充”。因此,必须添加一个仅包含填充数据的附加密码块。
可能是遗留系统不使用填充。尝试“AES / CBC / NoPadding”。