Badpadding异常后,Java AES加密失败

时间:2016-05-24 16:39:09

标签: java java-security

我使用以下代码来解密由128位AES加密的密文。

final IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
final SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");

final Cipher cipherSpec = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipherSpec.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
cipherSpec.doFinal(DatatypeConverter.parseBase64Binary(encrypted));

我的加密文本是简单的一行语句,我正在使用以下键和初始检查器

Key = "77696567683763656548616574326F6F"; // 128 bit key, hext string
initVector = "6F68706865726F68563274686F6F3761"; // 16 bytes IV, hex string

除了以下情况外,一切正常。

1)使用key作为初始向量并使用键的初始向量加密纯文本。使用BadPaddingException解密失败

2)使用密钥作为密钥并使用初始向量作为初始向量进行加密。上面的代码无例外地解密密文,但输出是垃圾。不是我加密的。

3)再次解密正确加密的密文(2步),现在解密为正确的纯文本。

我的问题是为什么解密无法在步骤2中解密成正确的密文?

1 个答案:

答案 0 :(得分:0)

我相信你的密钥,如果是128位,需要是一个16个字符(utf-8)字节数组而不是32个字符。所以你想做类似的事情:

Key = ("7769656768376365").getBytes("UTF-8");