使用SHA1验证用户的电子邮件 - PHP

时间:2014-11-18 17:04:27

标签: php sha1

基本上问题是,我是否可以使用SHA1哈希向新用户发送验证电子邮件而几乎没有重复哈希的可能性?

我想向用户发送此电子邮件:www.example.com/verify.php?hash=[40 digit sha1 hash]

而不是向他们发送此电子邮件:www.example.com/verify.php?user=123456&hash=[40 digit sha1 hash]

我想避免发送第二个用户参数。

哈希是这样创建的:

$verifyHash = sha1[$uid.$email.date('r')];

$uid是唯一的,$email是唯一的,date('r')与unix时间戳尽可能唯一。

您认为创建重复哈希的可能性是什么?

2 个答案:

答案 0 :(得分:1)

Sufficiently close to zero to ignore.

但是,您还应该使用mt_rand添加一些随机性。服务器上的确切时间很容易猜到,恶意用户也知道电子邮件和UID。

答案 1 :(得分:1)

  

任何小于12.8千万亿的块,你的赔率是   0.00000000000000000000000000000000000000000000000000%。

     

拥有12.8千万亿的积木,你的赔率是   0.00000000000001110223024625156540423631668090820313%。要拥有12.8千万亿个块,您需要95 EB,8 KB块,190 EB和16 KB   块,或290 EB,24 KB块。

来源:http://www.backupcentral.com/mr-backup-blog-mainmenu-47/13-mr-backup-blog/145-de-dupe-hash-collisions.html

另请参阅:https://pthree.org/2014/03/06/the-reality-of-sha1/

总之,是的,它非常安全。

话虽如此,请确保salt您的哈希值,否则可以轻松地重建它们。您需要盐的随机性和安全性取决于您。