我在数据库中有一个10个字符的字符串键字段。我已经使用CRC32来填充这个字段,但我担心重复。有人能告诉我这种情况下发生碰撞的可能性吗?
P.S。我的字符串字段在数据库中是唯一的。如果字符串字段的数量是100万,那么碰撞概率是多少?
答案 0 :(得分:76)
重复Expected collisions for perfect 32bit crc
答案引用了这篇文章:http://arstechnica.com/civis/viewtopic.php?f=20&t=149670
找到以下图片:http://preshing.com/20110504/hash-collision-probabilities
答案 1 :(得分:30)
在您引用的情况下,至少可以保证一次碰撞。至少一次碰撞的概率约为1 - 3x10 -51 。您期望的平均碰撞次数约为116次。
通常, k 样本中的平均冲突数,每个 n 可能值中的随机选择是:
至少发生一次碰撞的概率是:
在您的情况下, n = 2 32 且 k = 10 6 。
在你的情况下三次 - 碰撞的概率大约为0.01。请参阅Birthday Problem。