Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Sha1子串问题_Php_Sha1_Pastebin - Fatal编程技术网

Php Sha1子串问题

Php Sha1子串问题,php,sha1,pastebin,Php,Sha1,Pastebin,我正在创建一个pastebin类型的站点,并试图将id设置为一个随机字符串,如paste.com/4RT65L 在我将id添加到数据库之前,我得到了它的sha1,但是我得到了sha1的前8个字符的子字符串。他们有可能是同一个sha1的双重副本吗?我不想让它们意外地成为第二次粘贴,并且id已经被使用了?那么,8个字符发生冲突的几率明显高于两个Sha1键发生冲突的几率,但这并不意味着它可能会发生 我建议你对它做一些测试。生成随机输入并查看发生碰撞需要多长时间。如果你喜欢结果,那就去做吧。否则,您将需

我正在创建一个pastebin类型的站点,并试图将id设置为一个随机字符串,如paste.com/4RT65L


在我将id添加到数据库之前,我得到了它的sha1,但是我得到了sha1的前8个字符的子字符串。他们有可能是同一个sha1的双重副本吗?我不想让它们意外地成为第二次粘贴,并且id已经被使用了?

那么,8个字符发生冲突的几率明显高于两个Sha1键发生冲突的几率,但这并不意味着它可能会发生

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

编辑:您还可以通过查看地图来计算碰撞的几率

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

使用在线生日悖论计算器,经过大约9200次哈希运算后,发生冲突的几率为1%。在你有10%的机会之前,大约需要30000个哈希,在你有50%的机会之前需要77000个哈希

重要的是要指出,只要您的哈希函数能够很好地实现伪随机,那么使用哪一个都无关紧要(无论是SHA1、MD5还是任何形式的校验和)——这些数字假设完全是随机输入,因此您只能通过使用越来越好的哈希函数来接近这些值


所以最终,这取决于你期望的流量。如果这是一个小网站,你可能会逃脱它。如果是大量流量,则发生冲突的几率非常高。

8个字符发生冲突的几率明显高于两个Sha1键发生冲突的几率,但这并不意味着发生冲突的可能性很大

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

编辑:您还可以通过查看地图来计算碰撞的几率

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

使用在线生日悖论计算器,经过大约9200次哈希运算后,发生冲突的几率为1%。在你有10%的机会之前,大约需要30000个哈希,在你有50%的机会之前需要77000个哈希

重要的是要指出,只要您的哈希函数能够很好地实现伪随机,那么使用哪一个都无关紧要(无论是SHA1、MD5还是任何形式的校验和)——这些数字假设完全是随机输入,因此您只能通过使用越来越好的哈希函数来接近这些值


所以最终,这取决于你期望的流量。如果这是一个小网站,你可能会逃脱它。如果流量很大,则发生碰撞的几率非常高。

在分配id之前,您可以随时检查它是否被占用。。。或者更好,在数据库字段中添加一个唯一的id。。。问题已解决。:)

等等,你说的是SHA1的身份证。你不是说自动公司的身份证吧?我的第一个猜测是:

356a192b
da4b9237
77de68de

如果您使用的是随机id,为什么要在其上运行sha1?

在分配id之前,您可以始终检查它是否被占用。。。或者更好,在数据库字段中添加一个唯一的id。。。问题已解决。:)

等等,你说的是SHA1的身份证。你不是说自动公司的身份证吧?我的第一个猜测是:

356a192b
da4b9237
77de68de

如果您使用的是随机id,为什么要在其上运行sha1?

我发现了,我的代码是:

strtoupper(substr(sha1($token_start . $id . $token_end), 0, 8))
其中,$id是为了找出数据库+1中的id总量而获得的id,它是下一个id,因为它是自动递增的

然后,当它插入条目时,它会插入加密的

$token\u start和$token\u end都是随机字符串,您可以选择使新id唯一


我做了一个循环,将它们插入到一个数据库中32000次,只有id,自动递增和新id,我用distinct进行搜索,没有得到任何副本。这对我来说已经足够了。任何评论都会有帮助。我不知道要多久才会发生碰撞。如果有人知道第一个是什么时候,那就太棒了。

我想出来了,我的代码是:

strtoupper(substr(sha1($token_start . $id . $token_end), 0, 8))
其中,$id是为了找出数据库+1中的id总量而获得的id,它是下一个id,因为它是自动递增的

然后,当它插入条目时,它会插入加密的

$token\u start和$token\u end都是随机字符串,您可以选择使新id唯一


我做了一个循环,将它们插入到一个数据库中32000次,只有id,自动递增和新id,我用distinct进行搜索,没有得到任何副本。这对我来说已经足够了。任何评论都会有帮助。我不知道要多久才会发生碰撞。如果有人知道第一个字符串什么时候会出现,那就太棒了。

我想过这样做,但我不知道如何编写一个匹配两个精确字符串的程序。有什么想法吗?生成完全随机的字符串并计算它们的散列。散列函数是(或者至少它们试图是)伪随机的,所以输入是否有意义应该没有区别。那么,为什么不告诉我们“显著更高”到底意味着什么?如果我有一个流量大的站点,我会怎么做?我不知道,但我想知道像tinyurl这样的大网站会做什么?罗伯特,就像我提到的,你有40亿个选择。如果你发现一个碰撞,在数字上加1,直到你找到一个唯一的