2012-09-04 3 views
0

J'ai un système de connexion simple utilisant crypt et blowfish. Cependant, pour la vie de moi je ne peux pas comprendre pourquoi la fonction ne produit pas le mot de passe enregistré qui est stocké dans ma base de données. Quel est le problème avec la fonction crypt?La fonction de cryptage ne renvoie pas le mot de passe correct

Voici le mot de passe enregistré dans la base de données.

function unique_md5() { 

    mt_srand(microtime(true)*100000 + memory_get_usage(true)); 

    return md5(uniqid(mt_rand(), true)); 

} 

if ($password == $password_again) { 

$md5 = substr(unique_md5(), 0, 15); 

$string = '$2a$07$' . $md5; 

$password = trim($password); 

$protected_password = crypt($password, $string); 

//rest of code involved putting that $protected_password into database 

Connexion page Code

$password = 'password'; 

echo '$2a$07$4cf0aa3a82e8d78$$$$$$.M4dWdC3N7OF.hphzfyswwszM7RFJUfu'; 

//the echo below echos out the exact same thing as the echo above, but the if statement 
//recognizes it as not equal to 

echo $registered_password = registered_password($mysqli, $username); 

if ($password == crypt($password, $registered_password)) 

    { 

    echo 'Working'; 

    } else { 

    echo 'Not working'; 

} 
+0

Pouvez-vous montrer le code où vous chiffrez le mot de passe et de l'écriture à la base de données? –

Répondre

1

Vous utilisez la mauvaise fonction crypt. Vous devez comparer le mot de passe crypté avec le résultat de crypt, pas le mot de passe en texte brut.

Votre comparaison devrait être quelque chose comme:

if ($encrypted_password_from_database == crypt($user_provided_password, $encrypted_password_from_database)) { 
    // match 
} else { 
    // no match 
} 
Questions connexes