我收到了这个十六进制字符串的密钥:"140b41b22a29beb4061bda66b6747e14"
,并被要求用实现ECB的AES解密一个一块密码。
正如我们所知,密钥必须是16字节长。但是给定的密钥包含与大于一个字节的字符相对应的元素(例如,其字符值为对应于2个字节的²
的0xb2
)。
事实上,如果我将十六进制String键转换为键String,我将获得" A²*)¾´Úf¶t~ "
,那么如果我应用方法key.getBytes().length
,我将得到21字节长的键。
我的问题是:在Java中给定这个密钥,有没有办法用AES加密16字节长的密文?
您的键看起来大小正确-只是不要将其视为包含有意义字符的字符串。相反,使用十六进制转换方法将其转换为16字节数组,并将其用作密钥。
例如
String keyString = "140b41b22a29beb4061bda66b6747e14";
byte[] keyBytes = DatatypeConverter.parseHexBinary(keyString);
SecretKey key = new SecretKeySpec(keyBytes, "AES");