fihdi
fihdi

Reputation: 155

Converting String to Sha-256 Hash

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

Answers (4)

Mimu Saha Tishan
Mimu Saha Tishan

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

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

kervin
kervin

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

Tobias
Tobias

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

Related Questions