CakePHP2-密码哈希

CakePHP2-密码哈希,cakephp,md5,Cakephp,Md5,我不得不将大量的用户数据导入一个新的应用程序,其中包括md5哈希密码。我告诉CakeAUTH使用MD5及其使用方法,但哈希密码与原始哈希不匹配 AuthComponent明确使用md5(使用xdebug通过登录过程进行调试) 在SimplePasswordHasher.php第52行中 $this->hash($password) 结果是md5哈希,但与我的原始哈希不匹配 如何解决这个问题?事实上 $this->hash($password); 正在做什么 Security::h

我不得不将大量的用户数据导入一个新的应用程序,其中包括md5哈希密码。我告诉CakeAUTH使用MD5及其使用方法,但哈希密码与原始哈希不匹配

AuthComponent明确使用md5(使用xdebug通过登录过程进行调试)

SimplePasswordHasher.php
第52行中

$this->hash($password)
结果是md5哈希,但与我的原始哈希不匹配

如何解决这个问题?

事实上

$this->hash($password);
正在做什么

Security::hash($string, 'md5', true);
(src:)


因此,实际上,您并不是在做纯的
md5($string)
,而是在做salt和string的串联

如果您以前的应用程序不使用盐,我认为最简单的方法是将盐设置为空。不推荐,但也不能反转哈希

要设置salt,请编辑
app/Config/core.php

Configure::write('Security.salt', '');

但不确定你是否会收到警告。值得一试。

这很可能是因为您的应用程序使用了不同的salt(您的其他应用程序可能根本没有使用),请在您的应用程序中选中
安全性.salt

因此,要解决这个问题,你必须使用相同的盐,或者根本不用盐,尽管如果你问我,这些都不是一个好主意

我建议您强制用户创建新密码,并使用更安全的密码哈希算法,如bcrypt。看


为了记录在案,这可能是处理外来散列的最佳方式:

App::uses('AbstractPasswordHasher', 'Controller/Component/Auth');

class BackCompatPasswordHasher extends AbstractPasswordHasher {

    public function hash($password) {
        return md5($password);

        // or using a custom salt if necessary
        // return md5('the-other-apps-salt' . $password);
    }

    public function check($password, $hashedPassword) {
        return $hashedPassword === $this->hash($password);
    }

}

@gonzela2006在
app/Controller/Component/Auth/BackCompatPasswordHasher.php
中,请查看链接文档。