我想将字符串转换为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
正如其他人提到的,您正在使用默认的toString()方法,该方法仅输出类名和哈希码
如果要从字节数组的内容中进行十六进制打印,请尝试...Hex.encodeHexString(byte[] data),来自Apache Commons。
[How to convert a byte array to a hex string in Java?也有一些没有库的示例。
要以十六进制形式显示字节(而不是结果,在How do I print my Java object without getting "SomeType@2f92e0f4"?中进行说明),只需运行:
System.out.println((new HexBinaryAdapter()).marshal(hash));
在JAVA中,数组不会覆盖Object.toString()
。因此,hash.toString()
不返回数组内容的表示,而是数组本身的表示。显然,数组的这种表示不是很有用。 d efault toString()
implementation返回
toString()
我也已经遇到过此类问题,然后以这种方式解决。
getClass().getName() + '@' + Integer.toHexString(hashCode())