我正在查看 Bouncy Castle 以了解其哈希算法的性能与 .NET Framework 的性能相比如何,而且它看起来不太好;MD5 实现比 .NET 慢约 6 倍,SHA256 实现比 .NET 慢约 3 倍。
所以我想确保我正确使用了 Bouncy Castle,因为文档几乎不存在。这就是我正在做的事情:
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Digests;
public byte[] Hash(string filename)
{
IDigest hash = new Sha256Digest();
byte[] result = new byte[hash.GetDigestSize()];
using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read,
FileShare.Delete | FileShare.ReadWrite))
{
byte[] buffer = new byte[4092];
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
hash.BlockUpdate(buffer, 0, bytesRead);
}
hash.DoFinal(result, 0);
}
return result;
}
编辑
为了比较,这是我使用 .NET 的方式:
public byte[] Hash(string filename)
{
byte[] hashBytes;
HashAlgorithm hash = new SHA256CryptoServiceProvider();
using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read,
FileShare.Delete | FileShare.ReadWrite))
{
try
{
hashBytes = hash.ComputeHash(fs);
}
finally
{
hash.Clear();
}
}
return hashBytes;
}