如何快速哈希URL

Luk*_*101 7 c# algorithm hash c#-4.0

我有一个独特的情况,我需要动态产生哈希.这是我的情况.这个问题关系到这里.我需要在数据库中存储许多需要编制索引的URL.一个URL可以超过2000个字符.数据库抱怨超过900字节的字符串无法编入索引.我的解决方案是使用MD5或SHA256散列URL.我不确定使用哪种哈希算法.这是我的要求

  • 最短的字符长度,最小的碰撞
  • 需要非常.我将在每个页面请求上散列引用
  • 需要最小化冲突,因为我可能在数据库中有数百万个URL

我并不担心安全问题.我担心角色长度,速度和碰撞.有人知道这个算法很好吗?

Mar*_*ner 2

在你的情况下,我不会使用任何加密哈希函数(即 MD5、SHA),因为它们在设计时考虑到了安全性:它们主要是想让它尽可能难以找到具有相同哈希值的两个不同字符串。我认为这对你的情况来说不是问题。(当然,随机冲突的可能性是散列所固有的)

强烈不建议使用String.GetHashCode(),因为其实现尚不清楚,并且 MSDN 表示它可能因框架的不同版本而异。即使 x86 和 x64 版本之间的结果也可能不同。因此,当您尝试使用较新(或不同)版本的 .NET 框架访问同一数据库时,您会遇到麻烦。

hashCode我在维基百科(这里)上找到了Java实现的算法,它看起来很容易实现。在我看来,即使是简单的实现也会比 MD5 或 SHA 的实现更快。您还可以使用long降低碰撞概率的值。

这里还有对 .NETGetHashCode实现的简短分析(不是算法本身,而是一些实现细节),我猜你也可以使用这个。(或者尝试以类似的方式实现Java版本......)