2013-08-20 1 views
0

Nous avons quelques applications qui utilisent la même base de données. Les mots de passe utilisateur sont hachés par l'application cakePHP. Ce que nous aimerions faire, c'est comparer les mots de passe hachés par le service php et ceux hachés par cakePHP.Accéder aux mots de passe hachés par cakePHP du service PHP

Existe-t-il une fonction PHP qui imiterait le hachage de CakePHP afin de comparer les mots de passe? Sinon, quel serait le moyen le plus facile de contourner le problème?

Répondre

1

Je crois que CakePHP utilise la fonction hash à l'intérieur lib\Cake\Utility\Security.php pour obtenir les données hachurées de l'utilisateur et le comparer avec le hachage stocké dans le champ Mot de passe:

https://github.com/cakephp/cakephp/blob/master/lib/Cake/Utility/Security.php#L107

Je dirais aussi qu'il utilise habituellement la fonction sha1 de PHP par défaut qui utilise password de l'utilisateur et la valeur Security.salt (définie dans core.php) comme chaîne d'entrée. cet effet, vous pouvez faire quelque chose comme ça pour obtenir la valeur enregistrée sur le champ password de la table users:

sha1('cce93fda02c7f3ebf1g46c583589f1fd257e9d5d'. 'mypassword'); 

Ceci est la fonction complète de CakePHP qui fait usage de sha1:

public static function hash($string, $type = null, $salt = false) { 
    if (empty($type)) { 
     $type = self::$hashType; 
    } 
    $type = strtolower($type); 

    if ($type === 'blowfish') { 
     return self::_crypt($string, $salt); 
    } 
    if ($salt) { 
     if (!is_string($salt)) { 
      $salt = Configure::read('Security.salt'); 
     } 
     $string = $salt . $string; 
    } 

    if (!$type || $type === 'sha1') { 
     if (function_exists('sha1')) { 
      return sha1($string); 
     } 
     $type = 'sha256'; 
    } 

    if ($type === 'sha256' && function_exists('mhash')) { 
     return bin2hex(mhash(MHASH_SHA256, $string)); 
    } 

    if (function_exists('hash')) { 
     return hash($type, $string); 
    } 
    return md5($string); 
} 

Vous pouvez en lire plus à ce sujet dans CakePHP documentation.

+0

A travaillé! Merci beaucoup. – Domas

Questions connexes