【发布时间】:2010-09-29 16:38:08
【问题描述】:
还是由 Microsoft 自定义实现的算法?我测试了在 mac 上使用 OpenSSL 计算的 SHA1 等效于在 C# 中使用 system.security.cryptography.sha1 计算的哈希值。
【问题讨论】:
还是由 Microsoft 自定义实现的算法?我测试了在 mac 上使用 OpenSSL 计算的 SHA1 等效于在 C# 中使用 system.security.cryptography.sha1 计算的哈希值。
【问题讨论】:
System.Security.Cryptography.SHA1 是一个抽象类。它有三种实现方式:
所以,不,.NET Framework 附带的所有实现都没有在内部使用 OpenSSL。
Mono 为这些类提供了不同的实现。他们都使用the same implementation,它是用纯 C# 编写的。
您得到相同结果的原因是 SHA1 算法是确定性的,即它总是为相同的输入产生完全相同的结果。
【讨论】:
微软几乎肯定有自己的实现。
SHA-1 是一个(确定性)散列函数,因此如果将其应用于相同的输入数据,则应该通过两种不同的实现获得相同的结果。如果你不这样做,这不仅意味着这两个实现是不同的,还意味着它们之一或两者都包含错误。
【讨论】: