使用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);
而假定的symKey和symKey的内容是不同的?
将符号键转换为字符串的正确方法是什么,以便分发它?
谢谢。尝试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,同时我需要同样的方式来为所有这些语言格式化源代码…