3

我正在创建一个包含 password 和 password_again 字段的身份验证表单。所以我可以检查以确保它们匹配,我正在使用我的 UsersTable 的 beforeSave() 函数来处理散列。作为测试,我刚刚将它设置为再次显示密码,它的哈希结果然后死掉。

    public function beforeSave($event, $entity){
        debug($entity->password_again);
        $hasher = new DefaultPasswordHasher();
        $entity->password_again = $hasher->hash($entity->password_again);
        debug($entity->password_again);
        die();
    }

我很好奇为什么每次重新加载结果时哈希都会不断变化。每次我重新加载它时,我都希望哈希值保持不变。提前致谢。

编辑:所以事实证明,您不应该对两个密码进行哈希处理,然后尝试比较它们。相反, DefaultPasswordHasher->check(password_again, password_hash) 将验证密码是否与您匹配。

4

2 回答 2

2

DefaultPasswordHasher使用 PHP 的password_hash函数,该函数默认使用每次使用不同盐的河豚算法,导致每次调用时产生不同的哈希值。

于 2014-09-14T20:15:33.867 回答
0
public function checkPassword($passedPassword, $actualPassword) {
    if ((new DefaultPasswordHasher)->check($passedPassword, $actualPassword)) {
        return true;
    } else {
        return false;
    }
}
于 2016-08-12T09:18:24.383 回答