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

0

Поэтому, по существу, вопрос в том, могу ли я использовать хэш 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.

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

Теги:
sha1

2 ответа

1
Лучший ответ

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

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

  • 0
    так добавьте mt_rand к моей стоимости? такие как $verifyHash = sha1[$uid.$email.date('r').mt_rand()]; ?
  • 0
    Вы все еще добавили бы параметр? user = 12345 в электронное письмо? Или вы не предвидите, что кто-нибудь затопит файл verify.php случайными хэшами sha1 для пинка?
Показать ещё 1 комментарий
1

Все, что меньше 12,8 квадриллионов блоков, а ваши шансы составляют 0,000000000000000000000000000000000000000000000000000000%.

С 12,8 квадриллионными блоками ваши шансы составляют 0,00000000000001110223024625156540423631668090820313%. Чтобы иметь 12,8 квадриллионов блоков, вам необходимо 95 EB с кусками в 8 КБ, 190 EB с кусками в 16 КБ или 290 EB с кусками в 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/

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

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

  • 0
    Вы все еще добавили бы параметр? user = 12345 в электронное письмо?
  • 1
    Это зависит от того, как вы делаете поиск в базе данных. Пока идентификатор пользователя и хеш-код положительно связаны в БД, вы можете SELECT user_id FROM users WHERE verification_hash = :hash и получить идентификатор таким образом (поскольку мы предполагаем, что хеш-код уникален). Наличие в URL двух факторов (id / hash, email / hash и т. Д.) Предотвращает угадывание множества хэшей и авторизацию случайных пользователей. Это нужно ? Возможно нет. Полезно ли включать что-то еще? Вероятно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню