具有唯一哈希值的快速哈希函数

时间:2013-09-08 18:04:10

标签: java algorithm hash

我正在编写一个磁盘缓存,其中文件名是键。密钥可能比最大文件名长度长,因此需要进行哈希处理。什么是具有极低冲突概率的快速哈希函数(以便我可以忽略它)?

基本上,我正在寻找一种更快的MD5替代品,没有安全要求。

(平台= Android,语言= Java。)

2 个答案:

答案 0 :(得分:6)

如果您的散列是均匀分布的,那么您可以从碰撞前预期处理的大量文件中计算所需的散列大小(以位为单位)。基本上,由于生日悖论,它是位数的两倍。

所以,例如,如果你对一百万个文件之后的碰撞感到满意,那么你需要一个大约40位日志(2 * log2(1e6))的。

相反,如果散列是N位,那么它对于没有碰撞的2 ^(N / 2)个文件(或多或少)是好的。

有很多快速哈希。例如,xxhash是64位散列,因此适用于大约4,000,000,000个文件。 google's fast-hash是另一个。

如果你想要超过64位(碰撞前超过约40亿个文件)那么你可以使用具有更大输出的散列或者将两个64位散列连接在一起(一个散列来自原始文件,一个散列来自原始文件)某种方式(例如以空格为前缀))。

答案 1 :(得分:0)