2014-02-26 49 views
1

为什么以下测试失败?使用JAVA将AES对称密钥作为字符串传递

KeyGenerator generator = KeyGenerator.getInstance("AES"); 
SecretKey key = generator.generateKey(); 
byte[] symKey = key.getEncoded(); 
String keyAsString = new String(symKey, Charset.forName("UTF-8")); 
byte[] supposedSymKey = keyAsString.getBytes(Charset.forName("UTF-8")); 
Assert.assertEquals(symKey.length, supposedSymKey.length); 

而且supposedSymKeysymKey内容有什么不同? 什么是正确的方式将symKey转换为字符串,以便我可以分发它? 谢谢。

+1

的关键不是UTF默认编码,该supposedSymKey的字节数是不一样的,我会说,来表示它的最简单的方式串是六角形串。看看这里:http://stackoverflow.com/questions/9655181/convert-from-byte-array-to-hex-string-in-java – MByD

回答

2

尝试使用Base64编码/解码:

KeyGenerator generator  = KeyGenerator.getInstance("AES"); 
SecretKey  key    = generator.generateKey(); 
byte[]   symKey   = key.getEncoded(); 
String   buffer   = DatatypeConverter.printBase64Binary(symKey); 
byte[]   supposedSymKey = DatatypeConverter.parseBase64Binary(buffer); 
+0

或十六进制,作为替代。这个答案奇怪的格式 - 这是你如何格式化所有的代码? –

+0

对我来说,以这种方式格式化源代码非常方便:1)我在同一时间使用C,C++,C#和Java,结果我需要相同的方式来格式化所有这些语言的源代码。 – Maxim

相关问题