根据哈希验证密码
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';
}
}
?>