2010-06-13 17 views
0

J'essaie de concocter un script de connexion en PHP en tant que projet d'apprentissage.Script d'ouverture de session sécurisée PHP - hachage md5 ne correspond pas au hachage que j'ai écrit dans la base de données dans un script précédent?

Il s'agit du code de ma base de données en écriture lorsque l'utilisateur s'enregistre. Ces deux valeurs sont écrites dans la base de données.

$this->salt = md5(uniqid()); 
$this->password = md5($password.$salt); 

Lors de la connexion, la fonction suivante est déclenchée.

function challengeLogin($submittedPassword, $publicSalt, $storedPassword){ 
    if(md5($submittedPassword.$publicSalt) == $actualPassword){ 
     return 0; 
    }else{ 
     return 1; 
    }; 
} 

Malheureusement, en passant par mon code, les deux valeurs n'ont jamais été égales. Quelqu'un peut-il m'aider à comprendre pourquoi?

+0

$ publicSalt est le sel de la base de données de l'utilisateur, correct? Celui généré par '$ this-> salt = md5 (uniqid());' lors de la création d'un md5 du mot de passe? –

+0

Et la différence entre $ storedPassword et $ actualPassword dans le deuxième bloc est juste une faute de frappe? –

+0

Oui, c'est correct. –

Répondre

5

Je pense que le problème dans votre code est que la variable $salt n'est pas définie, elle est donc vide. Vous devez utiliser $this->salt

changement

à

$this->password = md5($password.$this->salt); 
+0

Vous avez probablement exactement raison. Ce genre de trébucher est exactement pourquoi j'ai décidé de prendre une approche orientée objet. Je suis à l'aise avec les scripts, mais la programmation fonctionnelle et OO ... pas tellement. –

1

Comparez les valeurs brutes avant qu'elles ne soient hachées avec quelques instructions d'écho de base. Soit le sel est faux, soit votre mot de passe est faux, soit le hash est en quelque sorte foutu.