Sha1子串问题

Rob*_*ona 1 php sha1 pastebin

我正在制作一个pastebin类型的网站,我正在尝试将id设为随机字符串,如paste.com/4RT65L

在我将它添加到数据库之前我得到了id的sha1但是我得到了sha1的前8个字符的子字符串.他们是否有可能成为同一个sha1的双重副本?我不希望他们意外地成为第二个已经使用过id的粘贴?

riw*_*alk 6

那么在8个字符中发生碰撞的几率明显高于与两个Sha1键碰撞的几率,但这并不意味着它可能会发生.

我建议你做一些测试.生成随机输入并查看碰撞前需要多长时间.如果你喜欢这个结果,那就去吧.否则,你需要一个更长的字符串.

编辑:您还可以通过查看生日悖论来计算碰撞的几率.

基本上,如果您从SHA-1获取前8个十六进制数字,那么您有16**8(4,294,967,296)个不同的可用组合.

使用在线Birthay Paradox计算器,在大约9200次哈希之后,您将有1%的碰撞几率.在你有10%的几率之前需要大约30,000个哈希值,在你有50%的几率之前需要77,000个哈希值.

重要的是要指出,只要你的哈希函数做一个伪随机的好工作,你使用哪一个(无论是SHA1,MD5,还是任何形式的校验和)都无关紧要 - 这些数字假设完全随机的输入,因此您只能通过使用越来越好的哈希函数来处理这些值.

所以最终,这取决于你期望的流量.如果这是一个小网站,你可以侥幸逃脱.如果是大量的流量,那么你的碰撞几率非常高.