如果我生成这样的密钥:
SecretKey aesKey = KeyGenerator.getInstance("AES").generateKey();
然后解码它:
System.out.println("used key: " + aesKlic.getEncoded());
现在我想用它来解密(退出程序后重新启动)。 显然,这样的事情不起作用:
SecretKey aesKey = javax.crypto.spec.SecretKeySpec@[B@6c6e70c7;
如果末尾的字符串是解码密钥。
答案 0 :(得分:1)
getEncoded()
会返回byte[]
,其toString()
的实现并非您所需要的。
您可能正在寻找密钥的十六进制或base64表示。
对于十六进制,您可以使用Hex.encodeHex(byte[])
对于base64 - Base64.encodeBase64String(byte[])
(均来自apache commons-codec)
当您需要恢复字符串编码的密钥时(例如,当您再次启动程序时),您将不得不调用上述方法的解码等价物(它们在相同的类中)。