我不得不將大量的用戶數據導入包含md5哈希密碼的新應用程序。我告訴CakeAUTH使用MD5及其使用它,但散列密碼與原始散列不匹配。Cakephp 2 - 密碼哈希
AuthComponent明確使用md5(通過使用xdebug的登錄過程進行調試)。
在SimplePasswordHasher.php
52行,它說
$this->hash($password)
結果是一個MD5哈希,但不符合我原來的哈希值。
如何解決這個問題?
我不得不將大量的用戶數據導入包含md5哈希密碼的新應用程序。我告訴CakeAUTH使用MD5及其使用它,但散列密碼與原始散列不匹配。Cakephp 2 - 密碼哈希
AuthComponent明確使用md5(通過使用xdebug的登錄過程進行調試)。
在SimplePasswordHasher.php
52行,它說
$this->hash($password)
結果是一個MD5哈希,但不符合我原來的哈希值。
如何解決這個問題?
事實上,
$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', '');
不知道你會得到警告,雖然。值得一試。
這很可能是因爲您的應用使用了不同的鹽(您的其他應用可能根本沒有使用),請在您的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);
}
}
我在哪裏可以添加此代碼? – gonzo
@ gonzela2006在'app/Controller/Component/Auth/BackCompatPasswordHasher.php'中,請檢查鏈接的文檔。 – ndm