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