【发布时间】:2010-11-15 02:17:58
【问题描述】:
(重新编写的问题,请参阅历史原文)。
问题就在标题中。
为什么 .NET 框架中没有托管 MD5 实现?
我说的是 MD5 算法的纯托管代码实现,它在 .NET 框架中不存在。
在 System.Security.Cryptography 命名空间中,我知道 MD5 抽象基类(它必须被继承并且不能按原样使用),我也知道MD5CryptoServiceProvider 和 MD5CNG 分别提供来自操作系统底层 CSP(加密服务提供者)和 CNG(下一代加密)提供者的实现,但是,这两个实现都是 非托管代码。
答案更新:
我很感激,虽然应该对这个问题有“一个真正的答案”,但我们(SO 社区)可能不知道它,除非 Microsoft 框架设计师(或直接了解该框架的人)参与其中然而,在这个社区中,许多人对从框架中省略托管 MD5 实现的想法提供了非常合理的“有根据的猜测”,但是,我仍然很想知道是否有人知道“真实”的答案这个问题。
【问题讨论】:
-
每个人都错过了你的问题的重点,因为它太长了。只保留标题 + 当前的最后两段将是完美的。
-
鉴于它是 CLI 标准库的一部分,您为什么要关心它?它的完成方式是一个实现细节。
Array.Copy也是不受管理的,但它不会打扰任何人,也不会对客户产生任何实际后果。如果您在框架中有一个托管的 MD5 提供程序,会发生什么变化? -
@wcoenen - 好吧,我确实有点胡扯,但是,我的问题的范围和细节在标题中就在那里,我专门使用了这些词“管理实施”至少 9 次!!!为什么这么难把握?尽管如此,我还是编辑了我的问题以缩短、澄清和提供更新。
-
有趣的是,.NET 保持对 CryptoAPI(或 CryptoNG API)的访问,因为这些算法符合 FIPS。纯托管版本可能更快,并且保证安全,而不是特定于平台 - 但如果您启用机器策略以仅允许符合 FIPS 的算法,托管的将变得不可用
-
MD5 在任何实现中都不符合 FIPS。
标签: .net hash cryptography