为啥 hash_equals 和 password_verify 不能正常工作?

Posted

技术标签:

【中文标题】为啥 hash_equals 和 password_verify 不能正常工作?【英文标题】:Why hash_equals and password_verify are not working properly?为什么 hash_equals 和 password_verify 不能正常工作? 【发布时间】:2018-03-02 10:47:57 【问题描述】:

在我的登录页面中,password_verify 后出现错误,好像我在验证密码时使用了 hash_equals。需要知道原因。

第二个问题是每次我通过更改密码页面更改密码时 hash_equals 不验证密码。以下是代码

if (!password_verify($password, $user['password'])) 
    $errors[]='Password does not match';


if (!hash_equals($password, $user['password'])) 
    $errors[]='Password does not match';

【问题讨论】:

这两个功能的手册你都看过了吗? 【参考方案1】:

函数 hash_equals() 并不是要使用哈希验证密码,这是 password_verify() 函数的工作,所以不要在代码中使用 hash_equals():

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($_POST['password'], $existingHashFromDb);

【讨论】:

以上是关于为啥 hash_equals 和 password_verify 不能正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

PHP密码和token

PHP-密码和token

PHP-密码和token

为啥 password_verify 返回 false?

为啥 werkzeugs `generate_password_hash` 的输出不是恒定的?

为啥 Django 不使用我的 registration/reset_password_done.html 模板?