(PHP), Как правильно реализовать склеп ()

Вот пример из страницы руководства PHP для склепа ():


Почему это работает? Я беру его 'mypassword' пароль, который я хочу, чтобы фактический администратор использовал. Так я склеп, что сначала, и набор это равняется $password. Очевидно, я должен должен быть сохранить это в DB. Но в следующих строках это используется и в качестве соли и в качестве по сравнению с чем я, и я не понимаю как crypt($user_input, $password) может возможно быть равно $password, если в этом последнем случае у меня есть идеально правильный пароль как $user_input но посоливший с $password сравнивание $password. Это имело бы больше смысла мне, если бы последняя строка была

if (crypt($user_input) == $password) {
   echo "Password verified!";
}

Что я не понимаю?

7
задан Tony Stark 10 February 2010 в 09:38
поделиться

1 ответ

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/

При сравнении ввода пользователя с результатом криптографии функция автоматически извлекает соль из строки.

8
ответ дан 7 December 2019 в 05:22
поделиться
Другие вопросы по тегам:

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