我使用下面的代码来解密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为密钥,以初始向量为初始向量进行加密。上面的代码无一例外地解密密文,但输出是垃圾。不是我加密的。
3)再次解密上述正确加密的密文(在2步中),现在将其解密为正确的明文。
我的问题是,为什么在步骤2中解密无法解密为正确的密文?
发布于 2016-05-25 04:55:38
我相信您的密钥,如果128位,需要是16个字符(utf-8)字节数组,而不是32个字符。因此,您可能希望执行以下操作:
Key = ("7769656768376365").getBytes("UTF-8");https://stackoverflow.com/questions/37419365
复制相似问题