system.security.cryptography.sha1 是否使用 OpenSSL 库的 SHA1 算法实现?
或者是微软自定义实现的算法?我测试了在 Mac 上使用 OpenSSL 计算的 SHA1 相当于使用 system.security.cryptography.sha1 在 C# 中计算的哈希值。
or is the algorithm custom implemented by Microsoft? i tested that SHA1 computed using OpenSSL on mac is equivalent to the hash computed in C# using system.security.cryptography.sha1.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
System.Security.Cryptography.SHA1 是一个抽象类。它具有三个实现:
因此,.NET Framework 附带的实现都没有在内部使用 OpenSSL。
Mono 为这些类提供了不同的实现。他们都使用 与用纯 C# 编写的相同实现。
得到相同结果的原因是 SHA1 算法是确定性的,即对于相同的输入它总是产生完全相同的结果。
System.Security.Cryptography.SHA1 is an abstract class. It has three implementations:
So, no, none of the implementations that ship with the .NET Framework use OpenSSL internally.
Mono ships with different implementations for these classes. They all use the same implementation which is written in pure C#.
The reason why you're getting the same result is that the SHA1 algorithm is deterministic, i.e. it always produces exactly the same result for the same input.
微软几乎肯定有自己的实现。
SHA-1 是一个(确定性)哈希函数,因此如果将其应用于相同的输入数据,您应该通过两种不同的实现获得相同的结果。如果不这样做,这不仅意味着这两种实现是不同的,还意味着它们之一或两者都包含错误。
Microsoft almost certainly have their own implementation.
SHA-1 is a (deterministic) hash function, so you ought to get the same results with two distinct implementations if you apply it to the same input data. If you don't, it doesn't just mean the two implementations are distinct, it also means that one or both of them contain errors.