Reputation: 1434
I have been using CryptoJS (i.e. CryptoJS.algo.SHA3.creat()
) library to SHA-3 hash on the front end. (see http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha3.js)
I was wondering if there are any Java library equivalence? But so far I haven't found any. There are not so many Java SHA-3 examples either.
sun.security.Provider
has SHA-3, but it's not visible under Eclipse. Also, I am not sure whether this sun's SHA-3 is same as the CryptoJS's SHA-3.
Could anyone please provide some examples?
Upvotes: 30
Views: 39404
Reputation: 20862
A new answer to an old question, in case others are searching like I was.
In Java 11 and later, there are 4 SHA-3 hashes available from the standard "Sun" security provider. Just ask for them by name with no other special configuration or code:
MessageDigest md = MessageDigest.getInstance("SHA3-256");
The other three available are SHA3-224
, SHA3-384
and SHA3-512
.
Official documentation of the supported MessageDigest
algorithm names is available.
Upvotes: 2
Reputation: 4385
Thanks to @jdv for his answer. I'm adding more information to have a quick start and an example.
First, add the BouncyCastle maven dependency, or get it on Maven Central :
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-jdk15on</artifactId>
<version>1.56</version>
</dependency>
Then we can test it :
import org.bouncycastle.jcajce.provider.digest.SHA3;
import org.bouncycastle.util.encoders.Hex;
import org.junit.Test;
@Test
public void testSha3() throws Exception {
String input = "Hello world !";
SHA3.DigestSHA3 digestSHA3 = new SHA3.Digest512();
byte[] digest = digestSHA3.digest(input.getBytes());
System.out.println("SHA3-512 = " + Hex.toHexString(digest));
}
You'll get this result (512 bits or 64 bytes in hexadecimal) :
SHA3-512 = e9a4fd120d684537d57f314d51213ce5acef8ff6974e2b7599674ef0f0a3cf111f0d26ed602db946739da448210fb76a7621d7a8f07728372b10a975f36d8e37
You can compare it with this result : https://duckduckgo.com/?q=sha3+%22Hello+world+!%22&ia=answer
Upvotes: 27
Reputation:
The common Java reference implementation for crypto and crypto support is probably BouncyCastle. It can be a big library to bring in, which is why we often reach into sun.security (rightly or wrongly.)
Anyway, BouncyCastle seems to offer org.bouncycastle.jcajce.provider.digest.SHA3.DigestSHA3
Upvotes: 32