【发布时间】:2019-12-18 16:39:32
【问题描述】:
我正在编写一个使用散列来加速文件比较的应用程序。基本上我预先散列文件 A,然后应用程序运行并将文件夹中的文件与以前散列的文件相匹配。我目前寻找哈希函数的标准如下:
- 磁盘 IO 是限制因素应该足够快。我目前正在使用 SHA-256,它工作得很好,但太重了,使我的应用程序 CPU 受限。
- 在这种情况下,密码学/安全性无关紧要,用户正在输入这两个文件,因此如果他们故意制造哈希冲突,那就在他们身上。
- 应该不惜一切代价避免哈希冲突。我可以根据大小和它们的散列比较文件,但如果两者都匹配,则假定文件是相等的。我知道由于数据压缩,任何散列都无法保证这一点,但是具有与 SHA-256 相同的唯一性保证的东西会很好。
- 文件大小从 10 字节到 2GB 不等
- 流式算法会很好,因为我试图保持应用程序的内存使用率较低,换句话说,我不想将整个文件加载到内存中以对其进行哈希处理。
- 哈希大小无关紧要,如果我用 1024 位哈希得到以上所有内容,我完全可以接受。
那么在这里使用什么好的算法,我使用的是 C#,但我确信大多数算法都可以在任何平台上使用。就像我说的,我使用的是 SHA-256,但我确信有更好的东西。
【问题讨论】:
-
在en.wikipedia.org/wiki/MurmurHash这样的设置中,我对 128 位版本的 MurmerHash_3 非常幸运。
-
我们在谈论多少个文件?
标签: algorithm hash language-agnostic