Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#将字符串散列为短数字_C#_String_Hash - Fatal编程技术网

C#将字符串散列为短数字

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

对于这项看似微不足道的任务,我找不到解决方案,这让我很烦恼

我想将任意长字符串(例如5000个字符)散列为一个小数字,例如6位数字


此散列应该是确定性的,它不应该与它运行在哪个体系结构或系统上无关(这是一个棘手的部分)。

您可以使用标准散列函数,例如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的讨论只提到了潜在的安全问题,而没有深入讨论细节。经过一番研究,我发现了这篇写得很好的博客文章:,它解释了可能的拒绝服务攻击,这可能与这个问题的上下文有关,也可能与上下文无关。