0

我正在使用以下代码来解密由 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 中解密为正确的密文?

4

1 回答 1

0

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

Key = ("7769656768376365").getBytes("UTF-8");
于 2016-05-24T20:55:37.517 回答