Возможный дубликат:
PHP: Как отправить исходный пароль пользователю, когда он нажимает забыли пароль, который зашифрован с помощью md5?
Я создал систему регистрации и регистрации в php, и я хочу сделать ссылку на забытый пароль для извлечения пароля из базы данных. Как я это делаю?
Примечание: пароль в базе данных с использованием md5-хэша
MD5 – криптографический хэш, а не схема шифрования. Его нельзя отменить никоим образом. Это может быть только грубо-принудительным, пытаясь использовать возможные пароли до тех пор, пока не будет найдено совпадение. Это не рекомендуется.
Вы не можете разумно восстановить пароль. Вместо этого вы забыли пароль, чтобы сбросить пароль.
Это преднамеренный и хороший дизайн. MD5 используется для хэширования паролей, поэтому, если база данных паролей должна быть взломана, хакеры будут иметь доступ только к хэшам паролей, а не к исходным паролям, что затрудняет их поиск паролей пользователей.
Тем не менее, на данный момент, MD5 крекеры получили достаточно быстро, что не рекомендуется для использования пароля. В будущем в качестве хэш-функции пароля следует использовать scrypt или bcrypt.
Весь смысл наличия хэша пароля заключается в невозможности восстановить исходный пароль из хеша. Таким образом, если кто-то взломает базу паролей и крадет все хеши, они не смогут восстановить все пароли пользователя. На самом деле это математически невозможно. Хеш-функция отображает все бесконечные числа возможных строк в набор строк фиксированной длины, поэтому существует (в идеале!) Бесконечное число строк, хэш которых имеет какое-либо конкретное значение хэша.
Если вы хотите «забыть пароль»? вариант, лучше всего просто сбросить пароль пользователя на что-то случайное, а затем отправить электронное письмо с новым нежелательным паролем.
md5 – это один из способов. Вы не можете перевернуть зашифрованные строки md5.
Как правило, то, что разработчики будут делать при предоставлении ссылки на забытый пароль, – это сбросить пароль пользователя на что-то случайное, сообщить им по электронной почте, а затем заставить их сбросить свой пароль при следующем входе в систему.
Другим решением было бы предоставить им случайный ключ и «ссылку на забытый пароль», которая может использоваться, чтобы позволить им сбросить свой пароль.
На всякий случай, если вы это рассматриваете, я хочу упомянуть, что не рекомендуется хранить пароли в базе данных в виде простого текста. Тот факт, что вы не можете получить пароль пользователя, означает, что хакер тоже не может.
В то время как другие плакаты правильные, я думаю, что конкретный ответ испрашивается здесь.
функция забытого пароля может быть реализована с использованием двух столбцов, связанных с идентификатором пользователя. один столбец представляет собой случайную строку, которая может быть произвольной длины, а другая – временем даты. Когда пользователь указывает, что они забыли свой пароль, вы генерируете случайную строку и обновляете эту запись с помощью строки и текущего времени. вы затем отправляете электронное письмо на свой зарегистрированный адрес электронной почты с URL-адресом, который имеет случайную строку. Когда этот URL открыт, вы проверите, существует ли случайная строка в ваших таблицах, и если она не истекла. вы проверите текущее время и время, в которое была сгенерирована строка, и у вас будет своя политика для определения того, что вы дольше будете ждать. обычно достаточно 3 дней. если срок действия ссылки истек, забытый пароль нужно будет запустить снова. если ссылка не истекла, вы увидите идентификатор пользователя, для которого была сгенерирована строка, и вы попросите пользователя ввести свое имя пользователя и новый пароль два раза. имя пользователя должно совпадать с идентификатором пользователя, для которого была сгенерирована строка, и оба пароля будут одинаковыми. вы затем обновите пароль пользователей с помощью хеша md5 нового пароля.
причина, по которой вы не хотите генерировать новый пароль, состоит в том, что если пользователь вызывает пароль, он все равно может войти в систему, даже если забытый пароль находится в процессе.
Если пользователи забывают свои пароли, вы не должны отправлять им свои пароли. Вместо этого им необходимо будет сбросить свои пароли после проверки (возможно, путем получения электронной почты или других средств), что они действительно являются правильными пользователями.