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

0

Зарегистрироваться:

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

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

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

  • 1
    Я полагаю, вам нужно сохранить соль в БД, а затем, когда пользователь входит в систему, получить запись, используя имя пользователя и восстановить пароль, используя ту же соль. Этот восстановленный пароль должен соответствовать сохраненному паролю?
  • 0
    Вам лучше почитать Security -> раздел Users ..
Теги:
hash
encode
bcrypt

2 ответа

1

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

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

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

  • 0
    Я понял смысл. Спасибо за это сообщение.
-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'];
  • 0
    Пароли не «хранятся в виде солей». Вы храните хэш своего пароля плюс соль. Ваш пример кода выглядит в целом нормально, за исключением того, что md5 крайне неадекватен в наши дни. «Salt» - это просто псевдоним для случайных битов, которые добавляются к паролю перед хэшированием, чтобы гарантировать, что каждый результирующий хэш пароля уникален. Вы храните соль вместе с хешем, никогда не сохраняя действительный пароль. Если вы комбинируете соль, пароль и хеш-значение, то же самое, что и сгенерированный хеш-код, и вычисленный хеш-код совпадает с хеш-хэдом, то был предоставлен правильный пароль.
  • 0
    Отказался в голосовании за то, что предложил слабый / скомпрометированный прямой алгоритм md5 вместо pbkdf2, bcrypt, scrypt или, по крайней мере, алгоритм HMAC с SHA256 (потому что SHA1 по крайней мере теоретически теперь тоже сломан), а также за предложение выйти из системы и снова войти в нее на каждой странице запроса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню