Использование SHA1 для проверки электронной почты пользователя

По сути, вопрос в том, могу ли я использовать хэш SHA1 для отправки электронного письма с подтверждением новому пользователю с небольшим шансом дублирования хэша?

Я хочу отправить пользователю это письмо: www.example.com/verify.php?hash=[40 digit sha1 hash]

в отличие от отправки им этого Emai: www.example.com/verify.php?user=123456&hash=[40 digit sha1 hash]

Я хочу избежать отправки второго пользовательского параметра.

Хеш создается так:

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

куда $uid уникален, $email уникален и date('r') настолько уникален, насколько это возможно с меткой времени Unix.

Как вы думаете, каковы шансы создания дублирующих хешей?

0

Решение

Достаточно близко к нулю, чтобы игнорировать.

Тем не менее, вы должны дополнительно добавить случайность, используя mt_rand, Точное время на вашем сервере легко угадать, а адрес электронной почты и UID известны злоумышленникам.

1

Другие решения

Что-нибудь менее 12,8 квадриллионов блоков, и ваши шансы
0,00000000000000000000000000000000000000000000000000%.

С 12,8 квадриллионом блоков ваши шансы
0,00000000000001110223024625156540423631668090820313%. Чтобы иметь 12,8 квадриллионов блоков, вам нужно 95 ЭБ с кусками по 8 КБ, 190 ЭБ с 16 КБ.
куски, или 290 ЭБ с кусками по 24 КБ.

Источник: 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/

В заключение, да, это довольно безопасно.

Это, как говорится, убедитесь, что вы поваренная соль ваш хэш, иначе их можно легко восстановить. Насколько случайной и безопасной вам нужна эта соль, зависит от вас.

1

По вопросам рекламы [email protected]