根據雜湊驗證密碼

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';
    }
}
?>