【发布时间】:2013-08-21 10:41:34
【问题描述】:
问题是我想用哈希函数来检查文件完整性,这里的加密是不必要的,所以我认为非加密哈希cityhash可能是一个不错的选择,因为我想要的只是速度和更少的冲突。
虽然source 刚刚提供了以固定长度字符串作为输入,哈希码作为输出的cityhash 函数。那么如何使用该函数对文件进行哈希处理呢?
我可以将文件分成几个块,计算每个块的哈希码并对每个哈希码进行异或吗?是否会影响碰撞效率或速度?你还有什么好主意吗?
【问题讨论】:
-
为什么你不能读入整个文件并将其作为一个字符串散列?如果文件太大,您可以读取这些块并将它们全部散列。然后,您可以将结果放入字符串中,然后对字符串进行哈希处理。如果原始算法不错,那么结果应该是相当一致的。
-
你可以分块做,然后在下一个块上使用种子参数。
-
您是否只对“噪声”或缺陷磁盘扇区的文件完整性感兴趣?因为否则“不需要加密哈希”是一个错误的假设。将散列值与 XOR 组合对于每个相当好的散列应该“工作正常”,但结果将不一样!您的最终哈希不会是 Cityhash 哈希值。至于影响速度,您可以通过在单独的线程中处理单个块来加快散列速度,但这当然不适用于使用 PlasmaHH 提出的种子参数(嗯,它会工作,但是顺序)。
-
是的,我想要的只是尽快找出文件是否已更改。使用单独的线程似乎是一个好方法,我将它与 Trenin 提到的循环结合起来看看是否它有效。