我正在从事一个涉及计算文件哈希值的项目。该项目就像一个文件备份服务,因此当文件从客户端上传到服务器时,我需要检查该文件是否已在服务器中可用。我为文件生成一个 CRC-32 哈希,然后将哈希发送到服务器以检查它是否已经可用。
如果文件不在服务器中,我过去常常将文件作为 512 KB block 发送 [用于重复数据删除],我必须为每个 512 KB block 计算哈希值。文件大小有时可能只有几 GB,并且多个客户端将连接到服务器。所以我真的需要一个快速和轻量级的文件哈希算法。任何想法..?
P.S:我已经注意到 StackOverflow 中的一些哈希算法问题,但答案并不完全是此类任务所需的哈希算法的比较。我敢打赌这对一群人来说真的很有用。
最佳答案
实际上,CRC32既没有最好的速度,也没有最好的分布。
这是意料之中的:按照今天的标准,CRC32 已经很老了,并且是在 CPU 不是 32/64 位宽也不是 OoO-Ex 的时代创建的,而且分布属性不如错误检测重要。自那以后,所有这些要求都发生了变化。
为了评估哈希算法的速度和分布属性,Austin Appleby 创建了出色的 SMHasher包裹。 结果的简短摘要是 presented here . 我建议选择 Q.Score 为 10(完美分布)的算法。
关于c++ - 大文件和 512 KB block 的最快和轻量级散列算法 [C、Linux、MAC、Windows],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13646574/