Вот пример из страницы руководства PHP для склепа ():
Почему это работает? Я беру его 'mypassword'
пароль, который я хочу, чтобы фактический администратор использовал. Так я склеп, что сначала, и набор это равняется $password
. Очевидно, я должен должен быть сохранить это в DB. Но в следующих строках это используется и в качестве соли и в качестве по сравнению с чем я, и я не понимаю как crypt($user_input, $password)
может возможно быть равно $password
, если в этом последнем случае у меня есть идеально правильный пароль как $user_input
но посоливший с $password
сравнивание $password
. Это имело бы больше смысла мне, если бы последняя строка была
if (crypt($user_input) == $password) {
echo "Password verified!";
}
Что я не понимаю?
crypt
является односторонней функцией и возвращает строку, которая уже содержит соль. Вывод аналогичен тому, что хранится в / etc / shadow
.
Пример из php.net :
<?php
echo 'result: ' . crypt('somepassword');
echo 'result: ' . crypt('somepassword');
echo 'result: ' . crypt('somepassword');
?>
result: $1$K2D8DGwq$b05uO37aMwO4rnDlB9Rsi1
result: $1$aPBvu2y.$213YVEs8/5m.jMCXSScly/
result: $1$dW3Xu2p6$nuCtJe2zzlgBMLxN2oZCx/
При сравнении ввода пользователя с результатом криптографии функция автоматически извлекает соль из строки.