【问题标题】:CakePHP 3 DefaultPasswordHasherCakePHP 3 DefaultPasswordHasher
【发布时间】:2014-09-14 19:46:09
【问题描述】:

我正在创建一个身份验证表单,其中包含密码和 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) 将验证密码是否与您匹配。

【问题讨论】:

  • 关于您的编辑:确切地说,它应该使用这种方法。这也是这个 PHP5.5 代码的 CakePHP2.x 实现在他们的comparison methods:...->check($value, $dbValue) 中所做的事情。

标签: cakephp hash cakephp-3.0


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    public function checkPassword($passedPassword, $actualPassword) {
        if ((new DefaultPasswordHasher)->check($passedPassword, $actualPassword)) {
            return true;
        } else {
            return false;
        }
    }
    

    【讨论】:

    • 你能进一步解释一下吗?
    猜你喜欢
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2018-10-24
    • 1970-01-01
    相关资源
    最近更新 更多