我有 2 32 个4 字节的密钥,我正在散列;碰撞的可能性有多大?
如果我有 2 64 个8 字节的密钥(不是真正存储每个密钥,但我想知道最坏的情况)怎么办?
根据关于生日问题的维基百科页面,可以找到一个很好的一阶近似值1-e^(-(n^2)/d)
。为您的值绘制此图会给出此图(对数水平轴,我放大了概率开始飙升的位置)。请注意,这只是一个近似值,应该保守地考虑(即,实际概率可能略高,但应该在正确的范围内)。
你在用哈希码做什么?如果您使用它们来确定两条数据是否相同,则 MD5 哈希非常好,但前提是您使用的数据不是由恶意实体创建的。(加密目的需要更好的哈希算法来精确处理“恶意攻击者”问题。)
如果您使用它们来构建地图(即,您正在构建哈希表),通常最好使用廉价的哈希并想出一种方法来减轻冲突的成本(例如,通过挂起链表当平均权重变得太大时,哈希表和调整大小/重建)。