基本上问题是,我是否可以使用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时间戳尽可能唯一。
您认为创建重复哈希的可能性是什么?
答案 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块。
另请参阅:https://pthree.org/2014/03/06/the-reality-of-sha1/
总之,是的,它非常安全。
话虽如此,请确保salt您的哈希值,否则可以轻松地重建它们。您需要盐的随机性和安全性取决于您。