C#将字符串散列为短数字
对于这项看似微不足道的任务,我找不到解决方案,这让我很烦恼 我想将任意长字符串(例如5000个字符)散列为一个小数字,例如6位数字C#将字符串散列为短数字,c#,string,hash,C#,String,Hash,对于这项看似微不足道的任务,我找不到解决方案,这让我很烦恼 我想将任意长字符串(例如5000个字符)散列为一个小数字,例如6位数字 此散列应该是确定性的,它不应该与它运行在哪个体系结构或系统上无关(这是一个棘手的部分)。您可以使用标准散列函数,例如SHA256: string str = "the quick brown fox jumps over the lazy dog"; byte[] encoded = SHA256.Create().ComputeHash(Encod
此散列应该是确定性的,它不应该与它运行在哪个体系结构或系统上无关(这是一个棘手的部分)。您可以使用标准散列函数,例如SHA256:
string str = "the quick brown fox jumps over the lazy dog";
byte[] encoded = SHA256.Create().ComputeHash(Encoding.UTF8.GetBytes(str));
var value = BitConverter.ToUInt32(encoded, 0) % 1000000;
这是确定性的、独立于平台的(因为SHA256是标准化的),可以使用任意长度的输入,并为任何字符串提供一个“非常”唯一的数字(即,您不太可能找到另一个具有相同数字的字符串,但这取决于您使用的输出位的数量)。您需要多好的哈希代码?你需要最小化碰撞吗?你可以做一些基本的事情,比如把所有的字符码相加,然后取取模1E7的和。哈希码中的哪些特性会是一个令人满意的答案?从技术上讲,我可以用
返回0来回答这个问题代码>-它是确定性的,可用于任意字符串等。哈希代码的优点可能取决于您的场景;i、 例如,你有什么字符串,它们变化了多少,等等。写一个在多个体系结构上工作相同的哈希算法并没有什么“棘手”的地方。例如,查找Wang哈希、Jenkins哈希、Murrushash。其中任何一个都能满足你的要求,你可以得到你想要的任何结果。它肯定比调用诸如SHA256或MD5之类的东西要快。这更好。请注意您使用它的目的,因为每次启动应用程序时,.net core中的ToHashCode函数都会更改为更改的原因是存在的(与默认情况下启动之间不更改的.net framework相反)()@CitrusO2这是一个有趣的观点!不幸的是,关于github的讨论只提到了潜在的安全问题,而没有深入讨论细节。经过一番研究,我发现了这篇写得很好的博客文章:,它解释了可能的拒绝服务攻击,这可能与这个问题的上下文有关,也可能与上下文无关。