我正在查看 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;
}
