使用32位哈希时发生冲突的可能性

时间:2013-01-08 07:40:22

标签: algorithm hash collision probability crc

我在数据库中有一个10个字符的字符串键字段。我已经使用CRC32来填充这个字段,但我担心重复。有人能告诉我这种情况下发生碰撞的可能性吗?

P.S。我的字符串字段在数据库中是唯一的。如果字符串字段的数量是100万,那么碰撞概率是多少?

2 个答案:

答案 0 :(得分:76)

答案 1 :(得分:30)

在您引用的情况下,至少可以保证一次碰撞。至少一次碰撞的概率约为1 - 3x10 -51 。您期望的平均碰撞次数约为116次。

通常, k 样本中的平均冲突数,每个 n 可能值中的随机选择是:

N(n,k)~=k(k-1)/(2n)

至少发生一次碰撞的概率是:

p(n,k)~=1-e^(-k(k-1)/(2n))

在您的情况下, n = 2 32 k = 10 6

在你的情况下三次 - 碰撞的概率大约为0.01。请参阅Birthday Problem