如何在PHP中比较BCRYPT哈希密码

时间:2019-06-30 20:00:55

标签: php hash passwords password-protection

我有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 个答案:

答案 0 :(得分:2)

登录用户的场景是

  1. 从html获取用户名和密码
  2. 从数据库中获取与用户名匹配的用户数据
  3. 传递来自用户输入的普通密码和来自的哈希 数据库返回password_verify函数,如果返回true, 表示密码正确,否则密码错误

请参阅文档php.net