c++ - 用于大型文件的快速和轻量的哈希算法 & 512 KB块 [C,Linux,MAC,Windows ]

  显示原文与译文双语对照的内容
0 0

我正在做一个项目,它涉及计算文件哈希。 项目类似于文件备份服务,因这里当文件从客户端上传到服务器时,我需要检查。 我生成文件的CRC-32 哈希,然后将哈希表发送到服务器,以检查它是否已经可以用。

如果文件不在服务器中,我用于将文件发送为 512 KB块 [for Dedupe],并且必须计算每个 512 KB块的哈希。 文件大小有时可能是gb和多个客户端将连接到服务器。 所以我真的需要一个快速而轻量级的文件哈希算法。 有什么想法。

P.S: 我已经注意到了for中的一些哈希算法问题,但是对于这种任务所需的哈希算法非常相对。 我打赌这对很多人来说是有用的。

时间: 原作者:

0 0

实际上CRC32既没有最佳的速度也没有最佳的分配。

这将是预期的: 由于/64 是不是 32位宽,而且分布性能也比错误检测要重要。 所有这些需求都发生了变化。

为了评估hash算法的速度和分布特性,Austin Appleby创建了优秀的 SMHasher插件包。 这里有一个简短的结果摘要,这里是 我建议选择一个 Q.Score 为 10 ( 完美分布)的算法。

原作者:
0 0

你说你正在使用 CRC-32,但是想要更快的散列。 CRC-32 非常基本且非常快速。 我认为 I/O 时间会比散列时间长很多。 你还需要一个不会有冲突的哈希。 这是两个不同的文件或者 512 KB块获取相同的哈希值。 你可以查看任何加密 hashs,如 MD5 ( 不用于安全应用程序) 或者 SHA1.

0 0

如果只使用 CRC-32 检查文件是否重复,那么由于不同的文件可以具有相同的crc-32,你将得到 false 重复。 你最好使用 sha-1,crc-32 和md5都太弱了。

...