Как проверить пароль, который закодирован?

Подписаться:

$users->setSalt(md5(time()));
$encoder = new MessageDigestPasswordEncoder('sha1', true, 1);
$password = $encoder->encodePassword($users->getPassword(), $users->getSalt());
$users->setPassword($password);

Результат примерно такой: qSmJxDmP8WhVJZIiJpeVLJFLnio =
Итак, пароль в безопасности. Но как проверить, что это тот же пароль, когда пользователь пытается войти?
(пароль пришел из формы, он равен паролю в базе данных)

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

0

Решение

Комментарий @ Deepak правильный. Соль не должен быть уникальным для каждого запроса. Он должен быть уникальным универсально и почти постоянно назначаться учетной записи пользователя.

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

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

1

Другие решения

Ваши пароли хранятся в виде солей, нет?

session_start ();

Иметь функцию logIn () для проверки каждого безопасного действия с помощью logOut (), запрашивать вашу БД по имени пользователя из $ _POST [‘username’] или $ _SESSION [‘username’]

$user = DB_QUERY_BY_USERNAME;

if ( !$user ) { logOut(); }

if ( $_POST['username'] && $_POST['password'] )
{
if ( $user['password'] != md5( $_POST['password'] . $user['salt'] ) )
{
logOut();
}
}
else if ( $_SESSION['username'] != $user['username'] )
{
logOut();
}

// Logged in, renew cookies, update DB, set $_SESSION variables

$_SESSION['username'] = $user['username'];
-1