2010-03-18 4 views
0

J'essaie de comparer le mot de passe shadow avec php cli mais ne fonctionne pas! J'utilise cette fonction pour que je peux créer un mot de passe comme l'ombreshadow password

function shadow ($input){ 
    for ($n = 0; $n < 9; $n++){ 
     $s .= chr(rand(64,126)); 
    } 
    $seed = "$1$".$s."$"; 
    $return = crypt($input,$seed); 
    return $return; 
} 

quand je remplacerai le résultat dans l'ombre, il est un travail avec le mot de passe, mais il est différent ont le caractère comment je peux le comparer.

grâce

Répondre

2

Votre fonction crée un sel aléatoire (Variable seed) en utilisant la fonction php rand. Ainsi, votre sel sera différent du sel utilisé par le mot de passe existant dans le fichier shadow.

Si vous voulez comparer hash (à savoir comparer la sortie de votre crypt appel avec la valeur shadow), les deux hash doivent être créés avec le même sel . Ainsi, vous devez utiliser le sel du mot de passe existant dans le fichier shadow (= la partie $1$...$) au lieu de créer votre propre au hasard. En d'autres termes, supprimez votre fonction et utilisez simplement crypt($input, '$1$...$') à la place, $1$...$ étant la première partie du hachage /etc/shadow.

0

Il peut également être intéressant de regarder dans le PAM pecl extension au lieu de jouer avec/etc/shadow.

Cette extension fournit l'intégration PAM (Pluggable Authentication Modules). PAM est un système de bibliothèques qui gère les tâches d'authentification des applications et des services. La bibliothèque fournit une API stable pour les applications à reporter à des tâches d'authentification.
2

Utilisez le sel stocké dans le fichier de mot de passe:

$crypted=crypt($_POST['password'], $stored_password); 
if ($crypted==$stored_password) (// they match 

Notez que vous n'avez pas à extraire explicity le sel du mot de passe stocké, ni vous soucier de l'algorithme/taille de sel - crypte fait que, pour toi.

C.