Как сравнить BCRYPT хешированные пароли в PHP - PullRequest
0 голосов
/ 30 июня 2019

У меня есть форма «создать нового пользователя» в HTML, и мне нужно знать, где ее части нуждаются в проверке и проверке (PHP или javascript) и как лучше всего это сделать.

Обработка пароля осуществляется в PHP, как и код, который проверяет, доступно ли данное имя пользователя или уже существует в базе данных. Нужно знать лучшее место для сравнения полей «пароль» и «подтвердить пароль», так как это трудно сделать, когда оба хэшируются в PHP.

if ($_SERVER["REQUEST_METHOD"] == "POST") { // If the form is submitted and by the method of post
    $new_username = test_input($_POST['new_username']); // Set new_username to the new_username value from the form
    $new_password = password_hash(test_input($_POST['new_password']), PASSWORD_DEFAULT); // Get the new_password from the form and hash it before passing to the variable
    $confirm_password = password_hash(test_input($_POST['new_password_confirm']), PASSWORD_DEFAULT); // Get the confirm_password field from the form and hash it
    $team = $_POST['new_team']; // Get the new_team field (doesn't need validation as it is a dropdown choice)
    $username_valid = test_account_validity($newConnection, $new_username);
    if ($username_valid) {
        echo "";
    }
    if (hash_equals($new_password, $confirm_password)) {
        echo "Passwords Match";
    }
    else {
        echo "Passwords Dont Match";
    }
}

function test_input($data) { // Function to remove spaces, slashes and special html characters before returning the valid data
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

Ожидаемые пароли совпадают с выводом, когда пароли перед хэшированием совпадают (одинаковые введены в оба поля формы), но в нем говорится, что пароли не совпадают.

EDIT

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

1 Ответ

2 голосов
/ 30 июня 2019

сценарий для входа в систему пользователя

  1. получить имя пользователя и пароль из HTML
  2. получить пользовательские данные, которые соответствуют имени пользователя из базы данных
  3. передать простой пароль, полученный из пользовательского ввода, и хеш от базы данных для функции password_verify, если она возвращает true означает, что пароль правильный, иначе пароль неправильный

см. Документы php.net

...