Reputation: 155
I want to convert a String to a SHA-256 Hash. I am using this code:
String text = "YOLO";
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes("UTF-8"));
System.out.println(hash.toString());
The problem is, when I start the program, it prints
[B@28d93b30
Why is this, and how can solve this?
Thanks in advance,
Fihdi
Upvotes: 2
Views: 2453
Reputation: 2633
I have also faced this type of issue and then solve in this way.
String text = "YOLO";
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
String encoded = DatatypeConverter.printHexBinary(hash);
System.out.println(encoded.toLowerCase());
Upvotes: 0
Reputation: 58
To print the bytes as hex (instead of that result, explained in How do I print my Java object without getting "SomeType@2f92e0f4"?), simply run:
System.out.println((new HexBinaryAdapter()).marshal(hash));
Upvotes: 1
Reputation: 11858
As others have mentioned, you're using the default toString() method which simply outputs the class name and hashcode
If you want a hex print out of the contents of the byte array try... Hex.encodeHexString(byte[] data) from Apache Commons.
Also How to convert a byte array to a hex string in Java? has some examples for doing this without a library.
Upvotes: 2
Reputation: 7771
In JAVA, arrays do not override Object.toString()
. Therefore, hash.toString()
does not return a representation of the contents of the array, but rather a representation of the array itself. Apparently, this representation of an array is not very useful. The default toString()
implementation returns
getClass().getName() + '@' + Integer.toHexString(hashCode())
Upvotes: 0