2013-09-25 4 views
0

Мне пришлось импортировать огромные пользовательские данные в новое приложение, которое включает в себя md5-хэшированные пароли. Я сказал CakeAUTH использовать MD5 и его использование, но хешированный пароль не соответствует исходному хэшу.Cakephp 2 - Password hash

AuthComponent определенно использует md5 (отлаживается через процесс входа в систему с использованием xdebug).

В SimplePasswordHasher.php линии 52, где он говорит

$this->hash($password) 

Результатом является md5 хэш, но не соответствует моей исходной Hash.

Как это исправить?

ответ

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', ''); 

Не уверен, что если вы получите предупреждение, хотя. Стоит попробовать.

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

Просто для записи, 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

Смежные вопросы