2013-09-25 145 views
0

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

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

SimplePasswordHasher.php 52行,它说

$this->hash($password) 

结果是一个MD5哈希,但不符合我原来的哈希值。

如何解决这个问题?

回答

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)它是盐和弦的串联。

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

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

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

不知道你会得到警告,虽然。值得一试。

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

} 
+0

我在哪里可以添加此代码? – gonzo

+0

@ gonzela2006在'app/Controller/Component/Auth/BackCompatPasswordHasher.php'中,请检查链接的文档。 – ndm