Лучший способ сохранить пароль в MySQL, который может быть расшифрован также с помощью PHP - PullRequest
11 голосов
/ 25 января 2010

В настоящее время я использую функцию md5 для шифрования моего пароля и сохранения в mysql db, который невозможно расшифровать.

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

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

я работаю на php и mysql.

Спасибо

Авинаш

Ответы [ 8 ]

14 голосов
/ 25 января 2010

Не делай этого ...

Сначала используйте что-нибудь лучше, чем md5. Затем создайте способ «сбросить» пароль, но никогда не получите способ восстановить пароль из БД ...

Это сделает ваше приложение менее безопасным, но, возможно, еще хуже; у вас и ваших пользователей будут проблемы, если ваши данные будут украдены! У кого-то будет база данных с именами пользователей и паролями всех ваших пользователей!

4 голосов
/ 25 января 2010

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

1 голос
/ 25 января 2010

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

0 голосов
/ 25 января 2010

Невозможно сохранить пароль таким образом, чтобы его можно было восстановить без

.

1) сохранение ключа дешифрования в вашем коде / данных (что, скорее, не дает цели хеширования / шифрования пароля)

2) шифрование пароля с использованием шифрования с открытым / закрытым ключом и маршрутизация восстановления посредством некоторого полуручного процесса, когда пароль может быть восстановлен.

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

C.

0 голосов
/ 25 января 2010
  • создание динамических солей (2, один «постоянный» для смешивания с паролем перед хэшированием / шифрованием, другой - динамический, меняется каждый раз, когда пользователь входит в систему);

    $dynamicSalt = '';
    for ($i = 0; $i < 8; $i++) 
    {    
        $dynamicSalt .= chr(rand(33, 126)); 
    }
    
  • никогда не сохраняйте пароли каким-либо способом, который поможет вам «расшифровать» их позже, вам не нужно восстановить оригинальный пароль, а позволить пользователям сбросить его

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

0 голосов
/ 25 января 2010

Если вы используете внутренний частный сайт без проблем с безопасностью, просто храните пароли с XOR 0xAD каждый байт. В противном случае сброс является единственным вариантом.

0 голосов
/ 25 января 2010

Это небезопасно, лучше создать способ сброса пароля

0 голосов
/ 25 января 2010

как насчет crypt () или openssl ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...