gpt4 book ai didi

java - 如何在 Java 中更快地计算 sha256?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:57 24 4
gpt4 key购买 nike

我发现在 java 中计算 sha256 很慢。例如,它比 python 慢。我编写了两个简单的基准测试来计算 1GB 零的 sha256。在这两种情况下,结果相同且正确,但 python 时间为 5653ms,java 时间为 8623ms(慢 53%)。每次结果都相似,这对我来说是一个重要的区别。

如何让java的计算速度更快?

基准:

Java:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class BenchmarkSha256 {

public static void main(String... args) throws NoSuchAlgorithmException {
int size = 1024 * 1024;
byte[] bytes = new byte[size];
MessageDigest md = MessageDigest.getInstance("SHA-256");
long startTime = System.nanoTime();
for (int i = 0; i < 1024; i++)
md.update(bytes, 0, size);
long endTime = System.nanoTime();
System.out.println(String.format("%1$064x", new java.math.BigInteger(1, md.digest())));
System.out.println(String.format("%d ms", (endTime - startTime) / 1000000));
}

}

python :

#!/usr/bin/env python

import hashlib
import time

size = 1024 * 1024
bytes = bytearray(size)
md = hashlib.sha256()
startTime = time.time()
for i in range(0, 1024):
md.update(bytes)
endTime = time.time()
print "%s\n%d ms" % (md.hexdigest(), (endTime - startTime) * 1000)

结果:

~> java BenchmarkSha256
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14
8623 ms

~> python BenchmarkSha256.py
49bc20df15e412a64472421e13fe86ff1c5165e18b2afccf160d4dc19fe68a14
5653 ms

java 和 python 版本:

~> java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode)

~> python --version
Python 2.7

最佳答案

您是否尝试过增量输入数据?您可以对字节使用 messageDigest.update(),然后使用 messageDigest.digest() 获取最终摘要?

在内存中分配一个 1GB 的数组是一个相当笨重的操作。您可能会发现较小的增量更新最终会更快。

关于java - 如何在 Java 中更快地计算 sha256?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7846841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com