【问题标题】:Use Cityhash for file integrity使用 Cityhash 实现文件完整性
【发布时间】:2013-08-21 10:41:34
【问题描述】:

问题是我想用哈希函数来检查文件完整性,这里的加密是不必要的,所以我认为非加密哈希cityhash可能是一个不错的选择,因为我想要的只是速度和更少的冲突。

虽然source 刚刚提供了以固定长度字符串作为输入,哈希码作为输出的cityhash 函数。那么如何使用该函数对文件进行哈希处理呢?

我可以将文件分成几个块,计算每个块的哈希码并对每个哈希码进行异或吗?是否会影响碰撞效率或速度?你还有什么好主意吗?

【问题讨论】:

  • 为什么你不能读入整个文件并将其作为一个字符串散列?如果文件太大,您可以读取这些块并将它们全部散列。然后,您可以将结果放入字符串中,然后对字符串进行哈希处理。如果原始算法不错,那么结果应该是相当一致的。
  • 你可以分块做,然后在下一个块上使用种子参数。
  • 您是否只对“噪声”或缺陷磁盘扇区的文件完整性感兴趣?因为否则“不需要加密哈希”是一个错误的假设。将散列值与 XOR 组合对于每个相当好的散列应该“工作正常”,但结果将不一样!您的最终哈希不会是 Cityhash 哈希值。至于影响速度,您可以通过在单独的线程中处理单个块来加快散列速度,但这当然不适用于使用 PlasmaHH 提出的种子参数(嗯,它工作,但是顺序)。
  • 是的,我想要的只是尽快找出文件是否已更改。使用单独的线程似乎是一个好方法,我将它与 Trenin 提到的循环结合起来看看是否它有效。

标签: c++ hash


【解决方案1】:

这不是CityHash的合适应用,这样使用会表现出很差的抗碰撞性。

如果您想要快速的文件完整性校验和,请使用 CRC 系列函数,例如 CRC16。如果您想要更广泛的内容,那么 SHA1 等加密哈希的速度应该绰绰有余。 (几乎任何现代 CPU 基本上都可以像从内存中读取数据一样快地散列数据。)

【讨论】:

  • 因为这是一个学习实验,所以我想尝试一种新的算法来代替CRC、MD5或SHA等传统哈希,看看它是否有效:)
猜你喜欢
  • 1970-01-01
  • 2010-11-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-24
相关资源
最近更新 更多