1

我在夜间研究生院学习。

在研究密码散列函数时,我发现 SHA3 散列函数的速度比 SHA2 散列函数的速度快。

所以,在实际的 JAVA 中使用 JMH benchmarking,我尝试比较 SHA2 的 SHA512/256 和 SHA3 系列的 SHAKE256 的性能,但似乎与我想象的差别不大。

我使用的库和我写的源代码如下。

  1. SHA512-256
import java.security.MessageDigest;

public static byte[] digest(byte[] data) throws NoSuchAlgorithmException 
{

    CryptoProvider.setupIfNeeded();

    java.security.MessageDigest digest = java.security.MessageDigest.getInstance("SHA512/256");
    digest.update(Arrays.copyOf(data, data.length));
    return digest.digest();

}
  1. SHAKE256(使用2种方法)
import org.bouncycastle.crypto.digests.SHAKEDigest;

public static byte[] shakeDigest(byte[] data, int returnLength) throws NoSuchAlgorithmException 
{

    CryptoProvider.setupIfNeeded();

    SHAKEDigest digest = new SHAKEDigest(256);
    byte[] hashBytes = new byte[returnLength];

    digest.update(data, 0, data.length);
    digest.doFinal(hashBytes, 0);
    digest.reset();

    return Arrays.copyOf(hashBytes, returnLength);

}

import com.github.aelstad.keccakj.fips202.Shake256;

public static byte[] shakeDigest2(byte[] data, int returnLength) throws Exception 
{

    CryptoProvider.setupIfNeeded();

    Shake256 digest = new Shake256();
    digest.getAbsorbStream().write(data);

    byte[] hashBytes = new byte[returnLength];
    digest.getSqueezeStream().read(hashBytes);
    digest.reset();

    return Arrays.copyOf(hashBytes, returnLength);

}

我想知道我是否遗漏了什么,或者是否存在一个比我使用的更接近完美的 SHAKE256 库。

请帮忙。谢谢你。

4

0 回答 0