Hash 下锚目的

Hash 下锚目的,hash,computer-science,Hash,Computer Science,我在研究不同的散列函数时遇到了。此哈希函数使用了一种称为“avalanching”的技术,其定义如下: /* Force "avalanching" of final 127 bits */ hash ^= hash << 3; hash += hash >> 5; hash ^= hash << 4; hash += hash >> 17; hash ^= hash << 25; hash += hash >> 6; /

我在研究不同的散列函数时遇到了。此哈希函数使用了一种称为“avalanching”的技术,其定义如下:

/* Force "avalanching" of final 127 bits */
hash ^= hash << 3;
hash += hash >> 5;
hash ^= hash << 4;
hash += hash >> 17;
hash ^= hash << 25;
hash += hash >> 6;
/*强制“固定”最后127位*/
hash^=hash>5;
hash^=hash>17;
hash^=hash>6;

雪崩的目的是什么?为什么要使用这些特定的位移位步骤(3、5、4..)

雪崩只是一个术语,用于定义对最终结果输入的微小变化的“区分”,对于scriptographic散列,不可逆性是一个非常重要的特性,相似的输入提供真正不同的结果是避免对单个散列进行近似攻击的理想特性。 有关此项的更多信息,请访问


我不明白为什么它使用这些步骤,但它使用AND和XOR以及自己的移位结果来增加扩散,可能其他值也会执行类似的操作,但这需要更深入的分析

,所以雪崩的目的只是为了减少碰撞的数量?@alex不,非雪崩散列在碰撞时也应该做得同样好。(也就是说,这是直觉,不是我能证明的。)然而,它应该减少“真实世界”输入的聚类。(就像使用哈希表存储稀疏数组。)@alexn不是冲突,只是两个相似的输入给出了非常不同的结果,否则你可以开始对随机值进行哈希运算,对输入进行细微更改,很容易找到冲突,只需比较输出更改的结果