我需要一个哈希函数来检查一些文件版本(基本上是检查客户端文件是否与服务器端文件相同)。我的问题是在.net库中有半打的HashAlgorithm实现,而我有点迷失了。我正在寻找一种快速算法,输出长度相对较短。安全性在这里并不是很重要。谢谢!
由于这不是安全问题,MD5可能适合您的目的。它在文件内容哈希方面非常标准。
从上面的所有内容来看,MD5是最简单和最快速的。
顺便说一句,对于你描述的问题,你不需要使用加密哈希函数,任何哈希函数都可以。因此,你可以使用校验和,例如CRC32(或更快的Adler32)。
如果有疑问,使用SHA-256。只有在实际实验中证明哈希速度是应用程序的瓶颈,并且可以证明您确实没有使用密码破解的哈希函数存在安全问题时,才考虑其他选项。这是正确的顺序,因为评估性能比评估安全性要容易得多,因此首先选择良好的安全性更加安全。除了选择MD5作为更快的函数之外,您还可以想象导入受控MD4实现(有一个链接):MD4甚至比MD5更容易被破解,但也更快。或者您可以尝试一些本地代码(在哈希函数实现上,本地代码通常比托管代码快2到4倍)。
如果需要较短的输出,可以简单地截断。这会机械地降低安全性,因此只有在您使用哈希函数与安全无关时才应该这样做。
MD5算法虽然快速,但现在强烈不建议使用。
人们倾向于对安全性放松警惕(“我不太关心安全”-我也这样做过,我们都会),但如果您确实不需要任何安全保障,那么可以选择MD5。
否则,请查看SHA算法。SHA-1被广泛使用。我不是加密专家,但我认为其他算法具有更长的块大小,可能会慢一些。有关差异的一些阅读材料可以在以下链接中找到:http://en.wikipedia.org/wiki/SHA-1以及此链接所链接的页面。
请注意,仅用于比较目的(例如检查文件是否相同且未被篡改)的缩短哈希值的有效方法是从哈希值中取出一部分字符。只需确保每次从相同的索引处取出它们(例如字符0-5;或字符5、11和13,您明白了吧)。