哈希算法“保证均匀”通常并不是指绝对均匀(每个桶恰好一样多),而是指在统计意义上,输入映射到输出空间的分布尽量均匀、无偏、低碰撞。下面从原理、设计手段和评估方式几个层面说明。
很多真实数据是有规律的,例如:
如果哈希函数“太简单”,这些规律会直接映射到输出空间,导致:
好的哈希算法的作用是:消除输入中的结构性偏置。
改变输入的 1 个 bit,输出应有约 50% 的 bit 发生变化。
例子:
h = (x * 2654435761) >>> 16目的:让高位信息也影响低位结果。
直接 % N 容易不均匀,尤其当:
解决方式:
使用大质数乘法可以打散低位规律:
h = (h * 31 + c) // 很多字符串哈希
31 是经验质数,兼顾分布和性能。
现代哈希通常:
例如 MurmurHash3:
如:
目的:即使攻击者知道算法,也无法预测分布。
因为:
哈希的目标是:
在“随机输入”下,输出近似均匀分布
在“恶意输入”下,仍不可被轻易预测
常用方法:
哈希算法通过位混淆、乘加混合、雪崩设计和随机化,把有规律的输入“打散”到输出空间,从而在统计意义上实现均匀分布,而不是保证每个位置严格相等。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。