我使用以下代码来解密由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中解密成正确的密文?
答案 0 :(得分:0)
我相信你的密钥,如果是128位,需要是一个16个字符(utf-8)字节数组而不是32个字符。所以你想做类似的事情:
Key = ("7769656768376365").getBytes("UTF-8");