2010-01-25 3 views
4

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

Hi

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

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

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

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

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

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

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

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

+4

Когда вы хотите один из ответов, пожалуйста, отметьте его как принято – tanascius

+0

спросил и ответил часто здесь. C. – symcbean

+0

tanascius, ваша ссылка не работает. –

ответ

13

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

1

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

+0

по крайней мере, с очень высокой вероятностью – Martijn

1

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

1

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

E.g (pseudo code):- 

if hash(password entered by user) == password stored in databse Then 
    //logged in successfully 
else 
    //login failed 
end if 
+0

Вторая половина вашего оператора if должна быть 'хешированным паролем, хранящимся в db'. Конечно, хранение незашифрованного пароля в любом месте небезопасно. –

+0

Согласен .... изменил код, чтобы его отразить .... Спасибо – Bhaskar

0

Я настоятельно рекомендую использовать 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; 
+0

Я бы подумал, что использование sha1() будет более безопасным? – Elliott

+0

MD5 был поврежден и не должен использоваться для шифрования –

1

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

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

Secure hash and salt for PHP passwords