我正在使用以下代码来解密由 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));
我的加密文本是简单的一行语句,我正在使用以下密钥和初始 verctor
Key = "77696567683763656548616574326F6F"; // 128 bit key, hext string
initVector = "6F68706865726F68563274686F6F3761"; // 16 bytes IV, hex string
除了以下情况外,一切正常。
1)使用密钥作为初始向量和初始向量和密钥对纯文本进行加密。解密失败,出现 BadPaddingException
2)以key为key,初始向量为初始向量进行加密。上面的代码毫无例外地解密了密文,但输出是垃圾。不是我加密的。
3)再次解密上面正确加密的密文(在 2 步中),现在它被解密为正确的纯文本。
我的问题是为什么解密无法在步骤 2 中解密为正确的密文?