我在夜间研究生院学习。
在研究密码散列函数时,我发现 SHA3 散列函数的速度比 SHA2 散列函数的速度快。
所以,在实际的 JAVA 中使用 JMH benchmarking,我尝试比较 SHA2 的 SHA512/256 和 SHA3 系列的 SHAKE256 的性能,但似乎与我想象的差别不大。
我使用的库和我写的源代码如下。
- 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();
}
- 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 库。
请帮忙。谢谢你。