我想将String转换为SHA-256哈希。我正在使用此代码:
String text = "YOLO";
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes("UTF-8"));
System.out.println(hash.toString());
问题是,当我启动程序时,会打印
[B @ 28d93b30
为什么会这样,怎么解决这个问题?
提前致谢,
Fihdi
答案 0 :(得分:2)
正如其他人提到的那样,您使用默认的 toString()方法,该方法只输出类名和哈希码
如果你想要一个十六进制打印出来的字节数组的内容尝试... 来自Apache Commons的Hex.encodeHexString(byte[] data)。
How to convert a byte array to a hex string in Java?还有一些没有库的例子。
答案 1 :(得分:1)
要将字节打印为十六进制(而不是How do I print my Java object without getting "SomeType@2f92e0f4"?中说明的那个结果),只需运行:
System.out.println((new HexBinaryAdapter()).marshal(hash));
答案 2 :(得分:0)
在JAVA中,数组不会覆盖Object.toString()
。因此,hash.toString()
不返回数组内容的表示,而是返回数组本身的表示。显然,这种数组表示不是很有用。 d efault toString()
implementation返回
getClass().getName() + '@' + Integer.toHexString(hashCode())
答案 3 :(得分:0)
我也遇到过此类问题,然后以这种方式解决。
~/.ssh/config