在Java中计算SHA 3哈希

gye*_*gye 25 java sha-3

我一直在前端使用CryptoJS(ie CryptoJS.algo.SHA3.creat())库来进行SHA-3哈希.(见http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha3.js)

我想知道是否有任何Java库等价?但到目前为止我还没有找到任何.Java SHA-3的例子也不多.

sun.security.Provider有SHA-3,但它在Eclipse下不可见.另外,我不确定这个太阳的SHA-3是否与CryptoJS的SHA-3相同.

有人可以提供一些例子吗?

小智 30

加密和加密支持的常见Java参考实现可能是BouncyCastle.它可以是一个很大的图书馆,这就是我们经常进入sun.security(正确或错误)的原因.

无论如何,BouncyCastle似乎提供org.bouncycastle.jcajce.provider.digest.SHA3.DigestSHA3


Gui*_*sta 21

感谢@jdv的回答.我正在添加更多信息以便快速入门并举例说明.

首先,添加BouncyCastle maven依赖项,或者在Maven Central上获取它:

    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>1.56</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

然后我们可以测试它:

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));
}
Run Code Online (Sandbox Code Playgroud)

你会得到这个结果(512位或64字节,十六进制):

SHA3​​-512 = e9a4fd120d684537d57f314d51213ce5acef8ff6974e2b7599674ef0f0a3cf111f0d26ed602db946739da448210fb76a7621d7a8f07728372b10a975f36d8e37

您可以将其与此结果进行比较:https://duckduckgo.com/?q = sha3 +%22Hello + world +!%22 &ia = answer