1

我得到了这个十六进制字符串中的密钥:"140b41b22a29beb4061bda66b6747e14"并要求用实现 ECB 的 AES 解密一个分组密码。

我们知道,密钥必须是 16 个字节长。但是给定的键包含对应于大于一个字节的字符的元素(例如0xb2,其 char 值²对应于 2 个字节)。

事实上,如果我将十六进制字符串键转换为我获得的键字符串" A²*)¾´Úf¶t~ ",那么如果我应用该方法key.getBytes().length,我得到的是键长 21 个字节。

我的问题是:在 Java 中给定这个密钥,有什么方法可以用 AES 加密 16 字节长的密文?

4

1 回答 1

1

您的密钥看起来大小正确 - 只是不要将其视为具有有意义字符的字符串。相反,使用十六进制转换方法将其转换为 16 字节数组并将其用作密钥。

例如

String keyString = "140b41b22a29beb4061bda66b6747e14";
byte[] keyBytes = DatatypeConverter.parseHexBinary(keyString);
SecretKey key = new SecretKeySpec(keyBytes, "AES");
于 2014-01-29T09:05:14.797 回答