使用JAVA将AES对称密钥作为字符串传递

使用JAVA将AES对称密钥作为字符串传递,java,string,encryption,encryption-symmetric,Java,String,Encryption,Encryption Symmetric,为什么以下测试失败 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.getB

为什么以下测试失败

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);
假定的symKeysymKey的内容是不同的? 将符号键转换为字符串的正确方法是什么,以便分发它?
谢谢。

尝试base64编码/解码:

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

默认情况下,密钥不是UTF编码的,假定的SymKey的字节不相同,我想说,将其表示为字符串的最简单方法是十六进制字符串。看看这里:或者十六进制,作为替代。这个答案是奇怪的格式——这是如何格式化你的代码?对我来说,用这种方式来格式化源代码是非常方便的:1)我使用C、C++、C和java,同时我需要同样的方式来为所有这些语言格式化源代码…