Cra*_*gTP 11 .net hash cryptography
(重写的问题,请看原始的历史).
问题就在标题中.
为什么.NET框架中没有托管的MD5实现?
我特别谈到MD5算法的纯托管代码实现,它在.NET框架中不存在.
在System.Security.Cryptography命名空间内,我知道MD5抽象基类(必须继承并且不能按原样使用),而且我也知道MD5CryptoServiceProvider和MD5CNG都提供了来自然而,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.有关详细信息,请参阅此
由于我没有设计框架,我不能肯定地说,但我相信他们可能不会为了出于安全原因而不鼓励使用它.
我原本认为非托管实现会更快,但我们现在知道情况并非如此,请参阅:https://stackoverflow.com/a/14850676/58391
我的下一个最佳猜测与Pavel在上述评论中所说的一致.与.NET和C#中的大多数功能一样,当底层非托管功能已经足够好时,实现,测试和发布功能可能没有足够的成本优势.
从设计语言的人那里看到真正的答案会很有趣.