如果不能保证字符串或整数的getHashCode()唯一,为什么要使用它?

问题描述 投票:0回答:2

正如我在标题中所写。

如果在您的应用程序中使用getHashCode()不安全,为什么要使用它? (用于字符串和整数)我想用它来相交方法和Linq模型中的方法或创建自己的IEqualityCompare类。感觉像是一次机会-如果不是100%安全?

或者我错过了什么?

https://docs.microsoft.com/中String.GetHashCode方法中所引用的那样>>

重要

如果两个字符串对象相等,则GetHashCode方法返回相同的值。但是,每个唯一的字符串值都没有唯一的哈希码值。不同的字符串可以返回相同的哈希码。

不能保证哈希码本身是稳定的。对于单个版本的.NET,跨.NET实现,跨.NET版本以及跨.NET平台(例如32位和64位)的相同字符串的哈希码可能有所不同。在某些情况下,它们甚至可能因应用程序域而异。这意味着同一程序的两次后续运行可能返回不同的哈希码。

因此,永远不要在哈希代码所在的应用程序域之外使用哈希代码。创建后,就永远不要将它们用作集合中的关键字段,也永远不要保留它们。

最后,如果出现以下情况,请不要使用哈希代码,而不要使用加密哈希函数返回的值:您需要加密强度高的哈希。对于加密哈希,请使用从System.Security.Cryptography.HashAlgorithm或System.Security.Cryptography.KeyedHashAlgorithm类。

有关哈希码的更多信息,请参见Object.GetHashCode。

正如我在标题中所写。如果在您的应用程序中使用getHashCode()不安全,为什么要使用它? (用于字符串和整数)我想用它来与方法相交,但Linq模型或...

c# linq hashcode iequalitycomparer
2个回答
3
投票

[我认为让您感到困惑的是,您认为哈希码映射到一个值的地址,但是不完全是那样。


1
投票

如果在您的应用程序中使用getHashCode()不安全,为什么要使用它?

© www.soinside.com 2019 - 2024. All rights reserved.