3

我目前正在一个非常轻量级(低处理器/低内存)Linux 设备上的 bash 脚本中使用 linux md5sum 命令来返回并记录单个目录中数千个名称相似的 32MB 文件的校验和。

md5sum ./file* >fingerprint.txt

第二天,我对同一组文件重复该过程,并以编程方式比较前一天哈希的结果。当我发现文件的指纹在第 1 天和第 2 天之间发生了变化时,我会对该特定文件采取行动。如果文件保持不变,我不采取任何行动并继续我的比较。

我遇到的问题是 md5 方法需要很长时间来处理每个文件。比较需要在一定的时间范围内完成,我开始遇到整个过程耗时太长的事件。

有没有其他方法/工具我可以用来可靠地进行这种比较?(注意,对文件执行日期比较是不够的,文件大小保持恒定 32MB)

4

2 回答 2

3

MD5 在加密散列函数中应该是最快的。但是任何给定的实现都可能做出在特定机器上意味着次优性能的选择。你使用什么样的硬件?处理器类型和 L1 缓存大小非常重要。

您可能想看看sphlib:这是一个在 C(优化但可移植)和 Java 中实现许多加密哈希函数的库。C 代码可以使用额外的“占用空间小”标志编译,这有助于小型嵌入式平台(主要是由于 L1 缓存大小问题)。此外,该代码还带有一个类似 md5sum 的命令行实用程序和一个速度基准测试工具。

在哈希函数中,MD4 通常是最快的,但在某些平台上,Panama、Radiogatun[32] 和 Radiogatun[64] 可以达到相似或更好的性能。您可能还想查看一些 SHA-3 候选,尤其是 Shabal,它在小型 32 位系统上相当快。

Important note: some hash functions are "broken", in that it is possible to create collisions: two distinct input files, which hash to the same value (exactly what you want to avoid). MD4 and MD5 are thus "broken". However, a collision must be done on purpose; you will not hit one out of (bad) luck (probabilities are smaller than having a "collision" due to a hardware error during the computation). If you are in a security-related situation (someone may want to actively provoke a collision) then things are more difficult. Among those I cite, the Radiogatun and Shabal functions are currently unbroken.

于 2011-04-03T18:06:05.990 回答
0

加快速度的方法:

  • 如果您有多个内核,则一次可以使用多个 md5hash 进程。但我怀疑您的问题是磁盘访问,在这种情况下这可能无济于事。
  • 你真的需要做MD5哈希吗?检查修改日期/时间、大小和 INODE 而不是散列以进行快速检查
  • 考虑每天执行快速检查,每周执行慢速 MD5 检查

我怀疑您实际上并不需要每次都对每个文件进行 MD5 哈希处理,最好仔细考虑您的实际需求,以及满足这些需求的最小解决方案是什么。

于 2011-04-02T08:42:04.663 回答