gpt4 book ai didi

c# - 使用 Bouncy CaSTLe 计算文件的哈希值

转载 作者:行者123 更新时间:2023-12-02 05:33:22 28 4
gpt4 key购买 nike

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

最佳答案

您应该检查的第一件事是您是否受 IO 限制或 CPU 限制。如果您受 CPU 限制,那么我怀疑 是 Bouncy CaSTLe。如果您受 IO 限制,可能是 .NET 在 IO 方面更加智能。首先,您可能希望将缓冲区大小从 4K 增加到(比如说)64K。试试看吧。这是一个非常容易的改变。一个更难的改变是使用异步 IO,以便在对已有数据进行哈希处理时读取下一个缓冲区的未哈希数据。

关于c# - 使用 Bouncy CaSTLe 计算文件的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12060338/

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