PHP 针对哈希验证密码

示例

password_verify() 是提供的内置函数(自PHP 5.5起),用于根据已知哈希验证密码的有效性。

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

所有受支持的哈希算法都存储标识哈希本身中使用了哪个哈希的信息,因此无需指明要使用哪种算法对明文密码进行编码。

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

<?php
// 不保证与完整的`password_hash()`保持相同的加密强度。
// 实作
if (CRYPT_BLOWFISH == 1) {
    // crypt()会丢弃超出盐长度的所有字符,因此我们可以传入
    // 完整的哈希密码
    $hashedCheck = crypt($plaintextPassword, $hashedPassword);

    // 这是基于使用的完整实现的基本恒定时间比较
    // 在`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';
    }
}
?>