根據雜湊驗證密碼
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';
}
}
?>