我目前正在一个非常轻量级(低处理器/低内存)linux设备上的bash脚本中使用linux md5sum命令来返回并记录单个目录中数千个类似命名的32MB文件的校验和。
md5sum ./file* >fingerprint.txt
第二天,我在同一组文件上重复这个过程,并以编程方式比较前一天哈希的结果。当我发现文件的指纹在第1天和第2天之间发生了变化时,我对该特定文件采取了措施。如果文件保持不变,我不采取任何行动并继续我的比较。
我遇到的问题是md5方法需要很长时间来处理每个文件。比较需要在一定的时间范围内完成,我开始遇到整个过程耗时太长的事件。
我是否可以使用其他方法/工具来可靠地执行此类比较? (注意,它不足以对文件执行日期比较,文件大小保持不变32MB)
答案 0 :(得分:3)
MD5应该在加密哈希函数中很快。但是任何给定的实现都可以做出在特定机器上意味着次优性能的选择。你用的是什么硬件?处理器类型和L1缓存大小非常重要。
您可能需要查看sphlib:这是一个实现C(优化但可移植)和Java的许多加密哈希函数的库。 C代码可以使用额外的“小占用”标记进行编译,这有助于小型嵌入式平台(主要是由于L1高速缓存大小问题)。此外,代码附带了一个类似md5sum的命令行实用程序和一个速度基准测试工具。
在哈希函数中,MD4通常是最快的,但在某些平台上,巴拿马,Radiogatun [32]和Radiogatun [64]可以达到类似或更好的性能。您可能还想看看一些SHA-3候选者,特别是Shabal,它在小型32位系统上速度非常快。
重要说明:某些哈希函数“已损坏”,因为它可能会产生冲突:两个不同的输入文件,它们散列到相同的值(正是您想要避免的)。因此MD4和MD5“破裂”。但是,必须在目的上进行碰撞;你不会碰到(坏)运气中的一个(由于计算过程中的硬件错误,概率小于“碰撞”)。如果您处于与安全相关的情况(有人可能想要主动引发碰撞)那么事情就更难了。在我引用的那些中,Radiogatun和Shabal功能目前尚未完整。
答案 1 :(得分:0)
加快速度的方法:
我怀疑你并不是真的需要每次都对每个文件进行MD5哈希,你可能最好仔细考虑你的实际需求,以及满足它们的最小解决方案。