Использование хеширования для безопасного хранения пользовательских паролей - PullRequest
4 голосов
/ 25 января 2010

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

Привет

Я хочу, чтобы никто не видел мой пароль даже в базе данных ..

Так что я использовал хэш-функцию, как это

$passowrd_hash=hash('shal',$_POST['password']);

Теперь я легко могу сохранить это значение password_hash в базе данных. Это будет что-то вроде в зашифрованном виде.

Теперь пользователь знает свой оригинальный пароль, он не знает этот зашифрованный пароль.

Теперь, если он попытается войти через этот оригинальный пароль ... Он не сможет войти.

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

Как это сделать?

Ответы [ 6 ]

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

вам нужно хешировать пароль пользователя и сравнить хэши.

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

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

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

Безопасный хеш и соль для паролей PHP

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

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

E.g (pseudo code):-

if hash(password entered by user) == password stored in databse Then
    //logged in successfully
else
    //login failed
end if
1 голос
/ 25 января 2010

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

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

Все, что вам нужно сделать, это зашифровать пароль, который вы вводите, и сравнить их; хеш в базе данных и тот, который вы только что зашифровали. Если они совпадают, то введенный пароль является правильным. Я предполагаю, что вы используете алгоритм, подобный SHA1.

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

Я настоятельно рекомендую использовать md5 () http://php.net/manual/en/function.md5.php.

Когда пользователь регистрируется, вы сохраняете:

$password = md5($_POST['password']);

А когда пользователь входит в систему, вы проверяете:

if($_POST['password_entered'] == $passwordFromDB) :
    // Log user in
else :
    // Show error to user
endif;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...