![]() |
1
8
由于我没有设计框架,我不能肯定地说,但我相信他们可能不会为了不鼓励出于安全原因使用它而费心。 我最初认为非托管实现会更快,但现在我们知道情况并非如此,请参见: https://stackoverflow.com/a/14850676/58391 我的下一个最佳猜测与帕维尔在上述评论中所说的一致。与.NET和C中的大多数功能一样,在底层的非托管功能已经足够好的情况下,实现、测试和交付该功能可能没有足够的成本优势。 不过,从设计语言的人那里看到一个真正的答案是很有趣的。 |
![]() |
2
14
MD5CryptoServiceProvider 从第一天起就在.NET框架中,实际上:
请注意,封装哈希算法的所有.NET BCL类都继承自 HashAlgorithm 类,所以这些可以多态使用…
…不同的实现可以被注入到代码中:
编辑 啊哈,我明白了。MD5(这纯粹是猜测)的一点是,它是最广泛使用的哈希算法之一,因此,它的实现需要符合某些标准——更具体地说, FIPS 140-1 . 见 this 更多信息。 |
![]() |
3
4
这完全是基于阅读来自不同微软博客的许多帖子的推测(尽管不是做出这个决定的特定人)。.NET框架中没有托管MD5实现,因为: 1)非托管Windows Crypto API已经提供了一个实现,他们负担不起,或者更可能认为他们有更好的事情要做,而不是投入资源来实现那些可以从底层非托管实现中打包出来的东西。阅读以下内容,可以了解他们为什么会做出这个决定。 How many Microsoft employees does it take to change a lightbulb? , Minus 100 points (适用于C编译器,但展示了在资源发挥最大作用的地方花费资源的相同心态) Why Doesn't C# Implement "Top Level" Methods? (再看一下单个功能所需的资源)和 features don't exist by default (从 here )这些都没有回答具体的问题,但它们都表明编写新代码需要大量的资源,这些资源可能更好地用于其他地方。您可以争辩说包装底层的非托管代码仍然需要资源,但我不认为有任何疑问,如果不重新编写已经可用、测试和工作的代码,将会节省净成本。 2)以后,或可能接近同一时间, research proved the feasibility of collision attacks against MD5 .在这一点上,用托管代码重新编写MD5的门槛可能会更高。一旦规定了安全开发生命周期 don't use banned crypto 我可以想象,MD5的托管版本将是他们投入资源的最后一件事。 虽然我的回答完全是猜测,但不难理解,即使是微软也有有限的资源和他们想要包含的大量功能。必须做出选择,而这些决定几乎总是会影响到特定的开发人员部分。 最后,您自己说有第三方MD5管理类,或者您可以始终 roll your own . MD5的托管版本可能是“ five minute feature “,但如果它真的是,那么作为程序员,我们可以自己编写它。 |
![]() |
4
2
MD5不适用于任何加密或文件验证目的,除了可能的错误检测传输错误。这可能是一个努力,让人们转移到更好的哈希,如sha-1或更可取的sha-256。 |
![]() |
5
1
|
![]() |
6
1
在.NET中,以CryptoServiceProvider结尾的任何内容都将包装非托管的Windows CryptoAPI。以托管语言结尾的任何内容都是完全用托管语言编写的。 link text 正如其他人所说,你不应该再使用MD5。您应该使用在.NET中具有托管实现的SHA-256。你可以用更好的算法进行交易。(编辑)由于MD5不再是犹太洁食者,因此在.NET的较新版本中,几乎没有机会对其进行完全管理,因为无论如何您都不应该再使用它。 |
![]() |
7
-1
从一开始就在那里
|
![]() |
Jahongir Rahmonov · 计算文件的校验和 7 年前 |
![]() |
Lev Knoblock · 类哈希函数 7 年前 |
![]() |
Sazzad Hissain Khan · 算法-在二维矩阵中搜索 7 年前 |
![]() |
Asur · 如何在PHP中同时使用多种算法对文件进行哈希? 7 年前 |
![]() |
OofYeetMcGee · 实现PBKDF2 7 年前 |
![]() |
yibs · 如何在Perl中计算csv中具有相同id的项目数 7 年前 |