MD5CryptoServiceProvider 能否安全地重复用于计算多线程代码中的 md5 哈希值?

Can MD5CryptoServiceProvider be safely reused to compute md5 hashes in multithreaded code?

我假设计算 md5 哈希是一个纯确定性函数,因此我假设使用单个 C# MD5CryptoServiceProvider 实例在多线程代码中计算哈希应该是安全的,因为我假设 md5 计算将被实现作为纯函数。

我不知道实现的细节,但我很惊讶它实现了 IDisposable,因为我不明白我假设作为纯函数实现的东西需要什么样的清理。

那么我假设在多线程代码中对 MD5CryptoServiceProvider 的单个实例调用 MD5CryptoServiceProvider.ComputeHash 是安全的吗?

你的假设是正确的。

I do not know the details of the implementation but I am surprised that it implements IDisposable,

为什么感到惊讶?我希望这种方法依赖于 OS 级别的加密功能,这些功能可能作为 COM 接口实现,并且在不再使用时可以很好地释放。

它甚至这样说:“使用加密服务提供商 (CSP) 提供的实现。”

查看源代码(而不是想知道),您只需使用 google 即可找到指向 https://referencesource.microsoft.com/#mscorlib/system/security/cryptography/md5cryptoserviceprovider.cs 的源代码 - 涉及的句柄也在该处置调用中处理。

您似乎认为这是 运行 本机代码 - 情况可能是这样,也可能不是,并且在 windows 上,当它已经在 OS.