根据哈希验证密码

password_verify() 是提供的内置函数(从 PHP 5.5 开始),用于验证密码对已知哈希的有效性。

<?php
if (password_verify($plaintextPassword, $hashedPassword)) {
    echo 'Valid Password';
}
else {
    echo 'Invalid Password.';
}
?>

所有支持的散列算法都存储信息,用于标识散列本身使用的散列,因此无需指示使用哪种算法对明文密码进行编码。

如果你的系统上没有 password_ *功能(并且你无法使用下面备注中链接的兼容包),则可以使用 crypt() 功能实施密码验证。请注意,必须采取特定的预防措施以避免计时攻击

<?php
// not guaranteed to maintain the same cryptographic strength of the full `password_hash()`
// implementation
if (CRYPT_BLOWFISH == 1) {
    // `crypt()` discards all characters beyond the salt length, so we can pass in
    // the full hashed password
    $hashedCheck = crypt($plaintextPassword, $hashedPassword);

    // this a basic constant-time comparison based on the full implementation used
    // in `password_hash()`
    $status = 0;
    for ($i=0; $i<strlen($hashedCheck); $i++) {
        $status |= (ord($hashedCheck[$i]) ^ ord($hashedPassword[$i]));
    }

    if ($status === 0) {
        echo 'Valid Password';
    }
    else {
        echo 'Invalid Password';
    }
}
?>