可能重复:
How do I create a HashCode in .net (c#) for a string that is safe to store in a database?
我使用C#4.0并通过调用获取字符串哈希:
"my string".GetHashCode()
此调用生成的代码存储在数据库中以备将来使用。此哈希码用于查找字符串的某个子集,然后进行相等的比较。
问题是:
答案 0 :(得分:19)
来自MSDN:
GetHashCode方法的默认实现不保证不同对象的唯一返回值。此外,.NET Framework不保证GetHashCode方法的默认实现,并且它返回的值在不同版本的.NET Framework之间是相同的。因此,不得将此方法的默认实现用作散列目的的唯一对象标识符。
所以不,你不能假设GetHashCode
产生的价值是稳定的。这不仅仅是理论上的 - we've seen the value change in the past。
如果你想要一个稳定的哈希,你必须自己生成它。
答案 1 :(得分:18)
答案 2 :(得分:3)
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
.NET Framework不保证默认实现 GetHashCode方法,它返回的值将是相同的 在不同版本的.NET Framework之间。因此, 此方法的默认实现不得用作唯一 用于散列目的的对象标识符。
答案 3 :(得分:2)
没有。它不便携。您应该从不将此方法用于平衡哈希树之外的任何其他方法。它的实现在Framework版本之间发生了变化,对于32位/ 64位CLR的行为也有所不同。
Eric Lippert对此功能的规则和正确用途有blog post。
相反,您应该使用SHA1Managed
将哈希插入数据库。