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

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

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

Но пароль шифруется с помощью md5. Генерация нового пароля не должна делать. Поскольку В этом администраторе проекта видят все подробности пользователя. Таким образом, я должен показать старый пароль Администратору. Таким образом, начальный пароль очень важен. ТАКИМ ОБРАЗОМ, как я могу дешифровать пароль или какой-либо другой способ отправить ему старый пароль?

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

9
задан Dave Sherohman 6 May 2010 в 10:44
поделиться

5 ответов

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

Вместо этого, либо ...

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

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

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

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

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

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

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

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

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

39
ответ дан 4 December 2019 в 06:05
поделиться

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

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

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


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

5
ответ дан 4 December 2019 в 06:05
поделиться

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

1
ответ дан 4 December 2019 в 06:05
поделиться

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

Наиболее распространенный способ «забыть пароль» - это сгенерировать новый пароль и попросить пользователя изменить его как можно скорее.

1
ответ дан 4 December 2019 в 06:05
поделиться

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

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

Из http://en.wikipedia.org/wiki/Rainbow_table :

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

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

1
ответ дан 4 December 2019 в 06:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: