C# 为什么在我的C代码中MD5比SHA256慢?
代码如下:C# 为什么在我的C代码中MD5比SHA256慢?,c#,.net,hash,md5,sha256,C#,.net,Hash,Md5,Sha256,代码如下: static byte[] hashWithMd5(string text) { using (var hasher = MD5.Create()) { byte[] inputBytes = Encoding.ASCII.GetBytes(text); byte[] hash = hasher.ComputeHash(inputBytes); return hash; } } SHA256的代码相同,只是调用了SHA25
static byte[] hashWithMd5(string text)
{
using (var hasher = MD5.Create())
{
byte[] inputBytes = Encoding.ASCII.GetBytes(text);
byte[] hash = hasher.ComputeHash(inputBytes);
return hash;
}
}
SHA256的代码相同,只是调用了SHA256Managed.Create()
每次运行一百万次以散列相同的硬编码20个字符的字符串。使用DateTime.UtcNow测量时间<代码>发布是目标,代码在调试器外部运行。目标框架版本为4.5.2
结果是:
x64
MD5 - 5.89 seconds
SHA256Managed - 2.97 seconds
x86
MD5 - 6.68 seconds
SHA256Managed - 3.57 seconds
因此,无论运行什么配置,SHA256都比MD5快得多
这怎么可能现实地发生呢?SHA256不是计算量更大吗?这可能是多种原因造成的。虽然md5通常比sha2快,但您可以检查这一点: 因此,这取决于各种因素:
在这里查看本文:您的结果似乎证实了前面提到的
Θ(n)
,但没有稍高的结果。似乎只是一个糟糕的实现x86将比x64运行得慢。微处理器的流水线将以比x64更快的速度运行x64。现在请使用百万字节字符串进行尝试。DateTime.UtcNow
不是最好的测量工具,Benchmark.NET甚至Stopwatch
会更好