2014-01-29 161 views
1

我以十六进制字符串给出了此密钥字符串:"140b41b22a29beb4061bda66b6747e14"并要求使用实施ECB的AES解密一个块密码。使用AES和长密钥进行一次块密码解密

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

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

我的问题是:是否有任何方法来加密一个16字节长的密文与AES在Java中给这个密钥?

回答

1

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

E.g.

String keyString = "140b41b22a29beb4061bda66b6747e14"; 
byte[] keyBytes = DatatypeConverter.parseHexBinary(keyString); 
SecretKey key = new SecretKeySpec(keyBytes, "AES"); 
+0

我们仍然完全同步邓肯的观点,相当惊人。 PS我试图让[标签:密码]是[标签:加密]的同义词。我不知道这是如何工作,但如果你发现如何投票它,这将是受欢迎的... –

+0

@owlstead是的,我已投票通过http://stackoverflow.com/tags/encryption /同义词并点击投票按钮。好决定。比赛你到20K :-)有点奇怪,[标签:解密]和[标签:解密]是[标签:加密]的同义词已经... –

+0

@owlstead FYI - 我在后一个问题上打开了一个话题:http: //meta.stackexchange.com/questions/217994/decryption-tag-should-not-be-synonymous-with-encryption。我欢迎你的想法(不要求在这里盲目支持)。 –

相关问题