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;
}