PHP: Как отправить исходный пароль пользователю, когда он нажимает забыли пароль, который зашифрован с помощью md5?

Я использую md5 для шифрования паролей в моем проекте.

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

Но пароль зашифрован с использованием md5.Generating новый пароль не должен делать. Потому что в этом проекте администратор может видеть все детали пользователя. Поэтому я должен показать исходный пароль для администратора. Поэтому начальный пароль очень важен. SO как я могу расшифровать пароль или любой другой способ отправить ему оригинальный пароль?

Заранее спасибо…

Хеши не предназначены для дешифрования, поэтому их часто называют «односторонними хешами» вместо хэшей.

Вместо этого …

  1. Создайте новый пароль, хеш, сохраните новый хэш пароля вместо старого и отправляйте новый пароль пользователю.

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

  3. Создайте nonce , сохраните его в поле для nonce и напишите пользователю ссылку с этим nonce, которая даст им доступ к странице для ввода нового пароля.

Третий вариант, вероятно, самый лучший из всех, поскольку он не оставляет фактического пароля (временного или нет) на простом просмотре кому-то, читающему электронную почту пользователя, и поскольку он использует nonce, как только он был использован, он не может снова использовать злоумышленник.

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

Редактировать:

«Поэтому я должен показать исходный пароль для администратора».

Если вы хешируете пароль, это невозможно . В общем, на самом деле это плохая идея, позволяющая администраторам видеть пароли пользователей, потому что большой процент пользователей имеет тенденцию использовать один и тот же пароль для нескольких вещей, и администратор одной вещи (например, сети компании), вероятно, не администратор многих других вещей (например, онлайн-банковская система пользователя).

MD5 не является алгоритмом шифрования, это алгоритм хеширования. Эти два варианта не совпадают; шифрование предназначено для обратимости (отсюда дополнительный термин «дешифрование»), тогда как хеширование предназначено только для одностороннего использования.

Вы не можете. Причина, по которой криптографические хэши [1] называются «необратимыми», заключается в том, что они не могут быть отменены. Какой смысл использовать их для хранения паролей – это означает, что если Bad Guy получает доступ к базе данных паролей, он не может просто изменить хэш, чтобы узнать, что все пароли.

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

Истинная история: Еще в 2000 году я устроился на работу в автозагрузке, которая создавала системы голосовой почты. Чтобы познакомить меня с продуктом в первый же день, ИТ-директор заставил меня создать учетную запись voicemail, что я и сделал, а затем он поднял ее в интерфейсе администратора. Я чуть не умер, когда увидел, что на экране отображается мой PIN-код голосовой почты, чтобы все могли видеть. Отчасти потому, что это была ужасно плохая практика безопасности, но главным образом потому, что, хотя он и не знал этого, он теперь знал ПИН-код для моей карточной карты . Это просто плохо, плохо, плохо. Не делай этого.


[1] MD5 – алгоритм хэширования, а не алгоритм шифрования. Ключевое различие между ними состоит в том, что для любого заданного алгоритма хэширования существует бесконечное количество входов, которые будут выдавать один и тот же результат (поэтому он не обратим), в то время как шифрование имеет взаимно однозначное соответствие ввода вывод.

Если пароль был хэширован, вам, вероятно, придется создать случайный пароль и отправить его пользователю. Затем, как только они войдут в систему, перейдите на экран « Изменить пароль», чтобы они могли изменить свой пароль на что-то более запоминающееся.

Одна особая цель (среди прочих) хэш-значения заключается в том, что она необратима, если она работает отлично.

Наиболее распространенным способом для функции «забытый пароль» является создание нового пароля и указание пользователю как можно скорее изменить его.

Просто добавив это как побочный элемент:

Хотя вы не можете «разобрать» хэш MD5, вы можете посмотреть его в таблице Rainbow. Это может позволить вам отправить исходный пароль открытого текста пользователю. Я не предлагаю это делать , потому что это просто пустая трата ресурсов по сравнению с просто созданием нового пароля и отправкой его пользователю.

С http://en.wikipedia.org/wiki/Rainbow_table :

Радужный стол представляет собой таблицу поиска, предлагающую компромисс с памятью времени, используемый для восстановления пароля открытого текста из хэша паролей, генерируемого хэш-функцией, часто криптографической хэш-функцией. Общее применение – сделать атаки на хешированные пароли выполнимыми. Соль часто используется с хешированными паролями, чтобы сделать эту атаку более сложной, часто неосуществимой.

Также см. Комментарии ниже для дополнительных заметок.