为什么.NET框架中没有托管的MD5实现?

Cra*_*gTP 11 .net hash cryptography

(重写的问题,请看原始的历史).

问题就在标题中.

为什么.NET框架中没有托管的MD5实现?

我特别谈到MD5算法的纯托管代码实现,它在.NET框架中不存在.

在System.Security.Cryptography命名空间内,我知道MD5抽象基类(必须继承并且不能按原样使用),而且我也知道MD5CryptoServiceProviderMD5CNG都提供了来自然而,OS的底层CSP(加密服务提供商)和CNG(加密下一代)提供商都是非托管代码.

答案更新:
我很欣赏,虽然这个问题应该有 "一个真正的答案",但我们(SO社区)可能不知道它,除非Microsoft框架设计师(或直接认识一个人)是该社区的一部分,然而,很多人提出了非常合理的"有根据的猜测",从框架中省略了管理MD5实现的想法,但是,我仍然很想知道是否有人确实知道这个问题的"真实"答案.

Ant*_*lev 14

MD5CryptoServiceProvider从第一天开始就在.NET Framework中,实际上:

byte[] hash = new MD5CryptoServiceProvider().
    ComputeHash(Encoding.ASCII.GetBytes("Hello World!"));
Run Code Online (Sandbox Code Playgroud)

请注意,封装散列算法的所有.NET BCL类都继承自HashAlgorithm类,因此可以多态使用这些类...

public byte[] ComputeHash(byte[] buffer, HashAlgorithm hashAlgorithm)
{ ...
Run Code Online (Sandbox Code Playgroud)

...并且不同的实现可以是依赖关系 - 注入到您的代码中:

public HashAlgorithm HashAlgorithm { get; set; }
Run Code Online (Sandbox Code Playgroud)

编辑

啊哈,我明白了.MD5(这是纯粹的推测)是它是最广泛使用的散列算法之一,因此,它的实现需要符合某些标准 - 更具体地说,FIPS 140-1.有关详细信息,请参阅

  • -1这是*不正确*.MD5CryptoServiceProvider不是托管实现. (6认同)

Joh*_*sch 8

由于我没有设计框架,我不能肯定地说,但我相信他们可能不会为了出于安全原因而不鼓励使用它.

我原本认为非托管实现会更快,但我们现在知道情况并非如此,请参阅:https://stackoverflow.com/a/14850676/58391

我的下一个最佳猜测与Pavel在上述评论中所说的一致.与.NET和C#中的大多数功能一样,当底层非托管功能已经足够好时,实现,测试和发布功能可能没有足够的成本优势.

从设计语言的人那里看到真正的答案会很有趣.

  • 某些测量与您断言本机CSP更快的说法相矛盾:http://byterot.blogspot.de/2013/01/net-framework-cryptography-symmetric-algorithm-performance-benchmark.html (2认同)