Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
Hash CRC-32哈希的唯一性是否足以唯一标识包含文件名的字符串?_Hash_Crc32_Hash Code Uniqueness - Fatal编程技术网

Hash CRC-32哈希的唯一性是否足以唯一标识包含文件名的字符串?

Hash CRC-32哈希的唯一性是否足以唯一标识包含文件名的字符串?,hash,crc32,hash-code-uniqueness,Hash,Crc32,Hash Code Uniqueness,我已经对连接到字符串的文件名列表进行了排序,并希望通过唯一的校验和来标识每个这样的字符串 这些字符串的大小最小为100字节,最大为4000字节,平均为1000字节。字符串的总数可以是任何数字,但更可能在约10000的范围内 CRC-32是否适合此用途? 例如,我需要以下每个字符串具有不同的固定长度(,最好是短的)校验和: "/some/path/to/something/some/other/path" "/some/path/to/something/another/path" "/some/

我已经对连接到字符串的文件名列表进行了排序,并希望通过唯一的校验和来标识每个这样的字符串

这些字符串的大小最小为100字节,最大为4000字节,平均为1000字节。字符串的总数可以是任何数字,但更可能在约10000的范围内

CRC-32是否适合此用途?

例如,我需要以下每个字符串具有不同的固定长度(,最好是短的)校验和:

"/some/path/to/something/some/other/path"
"/some/path/to/something/another/path"
"/some/path"
...
# these strings can get __very__ long (very long strings are the norm)
CRC-32哈希的唯一性是否随输入长度增加?

是否有更好的校验和选择

除非您的文件名全部为四个字符或更少,否则无法保证CRC是唯一的。对于10000个名称,其中至少两个具有相同CRC的概率约为1%

对于任何32位哈希值都是如此

为每个名称分配唯一代码的最佳方法是,只需为第一个名称在零处启动一个计数器,并为每个名称递增,将计数器分配为该名称的代码。然而,这并不能帮助您计算只给出名称的代码

您可以使用哈希,例如CRC或其他哈希,但需要处理冲突。文献中有几种常见的方法。您将保留一个已分配名称的哈希列表,如果发生冲突,您可以增加哈希,直到找到一个未使用的哈希并分配该哈希。然后在查找名称时,从计算出的哈希开始,对名称进行线性搜索,直到找到该名称或未使用的插槽


至于杂烩,我推荐。这是一个非常快速的64位哈希。您不需要此应用程序的加密哈希,这将是不必要的慢。

如果您已经有一个唯一的校验和,那么问题是什么?最小100字节,最大4000字节,平均1000字节。问题是缩短这些字符串,重新计算它们,重新计算校验和,然后查看以前是否计算过校验和。我想确定crc-32适用于此,因为我不太了解散列函数和最小化冲突概率。您希望总共有多少个条目?猜测1000、10000(1e5)、100万(1e6)或更多?您是否介意将注释中的值添加到您的问题中。?在我看来,这将有助于其他人回答你的问题,因为他们知道“问题的规模”。感谢您提供的信息-这对我们很有帮助。imo,我将为您的应用程序查看“md5”哈希。快速和非关键点以提供碰撞。在我看来,它不是用来做任何与安全性有关的事情的,它只是一个文件名的快速查找。必须相信阿德勒:谢谢!不幸的是,在这种情况下,我不能仅仅使用计数器。所以为了最小化冲突并最大化速度,您建议使用哪种哈希函数?您可以使用更长的哈希函数来最小化冲突,但冲突的概率永远不会为零。除非您对一个可能只能工作的程序感到满意,否则您将需要处理冲突。@MCH Git在160位SHA-1上工作得很好,但它仍然是。并不是说你会偶然遇到一个。这真的让我想到了。我的意思是哈希用于验证任意长度文件的完整性。。。当然,我不想要一个“可能”有效的程序。。。但我看不出有什么办法可以绕过散列函数:(@Antti Haapala:谢谢!