0

我不得不将大量用户数据导入一个包含 md5 哈希密码的新应用程序。我告诉 CakeAUTH 使用 MD5 并使用它,但散列密码与原始散列不匹配。

AuthComponent 肯定使用 md5(通过登录过程使用 xdebug 进行调试)。

SimplePasswordHasher.php第 52 行它说

$this->hash($password)

结果是一个 md5 哈希,但与我的原始哈希不匹配。

如何解决?

4

2 回答 2

0

实际上,

$this->hash($password);

是在做

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

(来源:http: //api.cakephp.org/2.4/source-class-SimplePasswordHasher.html#41


所以实际上,你在md5($string)这里做的不是纯,md5($salt.$string)而是盐和字符串的串联。

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

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

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

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

于 2013-09-25T08:35:46.690 回答
0

这很可能是因为您的应用程序使用了不同的盐(您的其他应用程序可能根本没有使用),请检查Security.salt您的Config/core.php.

所以要解决这个问题,你将不得不使用相同的盐,或者根本不使用盐,尽管如果你问我这些都不是一个好主意。

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

http://book.cakephp.org/2.0/en/core-utility-libraries/security.html#Security::hash
http://book.cakephp.org/2.0/en/core-libraries/components/authentication。 html#using-bcrypt-for-passwords

仅作记录,自定义密码哈希可能是使用外部哈希的最佳方式:

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);
    }

}
于 2013-09-25T08:35:59.763 回答