Итак, я изучаю PHP и работаю на странице входа. Я уже понял, как зарегистрировать нового пользователя, используя SHA256 для хеша $ salt + $ password. Я знаю, что существуют более медленные методы шифрования, такие как bcrypt, но для учебных целей я просто использую SHA256. Мой вопрос, после использования его для шифрования:Извлечение соли + хэш из БД для проверки
function HashPassword($password) {
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM));
$hash = hash("sha256", $salt . $password); column
$final = $salt . $hash;
return $final;
}
используя подготовленные заявления, что это лучший способ, чтобы получить хэш пароля из базы данных, так что я могу проверить его с помощью функции, как это?
function ValidatePassword($password, $hash_pass) {
$salt = substr($hash_pass, 0, 64);
$trueHash = substr($hash_pass, 64, 64);
$reHash = hash("sha256" , $salt . $password);
return $reHash == $trueHash;
}
Да, я понимаю концепцию и благодарю вас за дополнительное разъяснение. Что меня отключает, так это как мне получить доступ к конкатенированному хэшу, который находится в моей БД. выберите из имени пользователя пароль, где username = '$ username'? – Jukodan
@ Jukodan вы можете сделать один запрос для извлечения как соли, так и хэшированного пароля: 'SELECT hashedPW, salt FROM users WHERE username = '$ username''. Затем сравнение выполняется в PHP. Важным моментом является наличие разных солей для каждого пользователя, а не глобального (комментарий к другому ответу звучит так, как будто у вас есть только одна «соль» для всех пользователей). – Sirko
Ах! Я уже думал об этом, главным образом потому, что, когда я запросил базу данных и повторил результат, я получил «ресурс ID # 2» вместо ожидаемого хэшированного пароля. В настоящее время я использую: $ salt = bin2hex (mcrypt_create_iv (32, MCRYPT_DEV_URANDOM)); , чтобы создать случайную соль для каждого пользователя, а затем сохранить хэш = соль + пароль в одном столбце. – Jukodan