2013-09-25 224 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