fhu*_*cho 1 java algorithm hash
我正在写一个磁盘缓存,其中文件名是键.密钥可能比最大文件名长度长,因此需要进行哈希处理.什么是具有极低冲突概率的快速哈希函数(这样我可以忽略它)?
基本上,我正在寻找一种更快的MD5替代方案,没有安全要求.
(平台= Android,语言= Java.)
如果您的散列是均匀分布的,那么您可以从碰撞前预期处理的大量文件中计算所需的散列大小(以位为单位).基本上,由于生日悖论,它是位数的两倍.
所以,例如,如果你对一百万个文件之后的碰撞感到满意,那么你需要一个大约40位log(2*log2(1e6))的has.
相反,如果散列是N位,那么它对于没有冲突(或多或少)的2 ^(N/2)个文件是有益的.
有很多快速哈希.例如,xxhash是64位散列,因此适用于大约4,000,000,000个文件. 谷歌的快速哈希是另一个.
如果你想要超过64位(碰撞前超过约40亿个文件)那么你可以使用具有更大输出的散列或者将两个64位散列连接在一起(原始文件中的一个散列和以某种方式修改它的一个散列(例如,以空格为前缀)).