Cakephp 2 - 密码哈希

时间:2013-09-25 07:51:44

标签: cakephp md5

我不得不将巨大的userdata导入到一个包含md5-hashed密码的新应用程序中。我告诉CakeAUTH使用MD5并使用它,但散列密码与原始散列不匹配。

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

SimplePasswordHasher.php第52行,其中显示

$this->hash($password)

结果是md5哈希,但不匹配我原来的哈希。

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

事实上,

$this->hash($password);

正在做

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

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


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

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

要设置salt,请修改app/Config/core.php

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

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

答案 1 :(得分:0)

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

所以要解决这个问题,你必须要么使用相同的,或者根本不使用盐,但如果你问我,这一点都不是一个好主意。

我建议您强制用户创建新密码,并使用更安全的密码散列算法,如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

仅仅为了记录,a custom password hasher可能是处理外国哈希的最佳方式:

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

}