2011-11-03 5 views
0

J'ai écrit une classe pour authentifier un utilisateur en utilisant l'authentification HTTP la manière Digest. J'ai lu quelques articles et je l'ai fait fonctionner. Maintenant, je voudrais le laisser utiliser des mots de passe Md5, mais je n'arrive pas à le faire fonctionner, c'est la fonction d'authentification des utilisateurs.PHP Digest authentification avec MD5

public function authenticate() { 

// In case the user is not logged in already. 
if (empty($_SERVER['PHP_AUTH_DIGEST'])) { 

    // Return the headers. 
    $this->show_auth(); 

} else { 

    // Parse the given Digest-data. 
    $data = $this->parse_request($_SERVER['PHP_AUTH_DIGEST']); 

    // Check the data. 
    if (!$data) { 

     // Display an error message. 
     die($this->unauthorized); 

    } else { 

     // Based on the given information, generate the valid response. 
     $usr_password = "test"; 

     // Generate the response partly. 
     $A1 = md5($data['username'].":".$this->get_realm().":".$usr_password); 
     $A2 = md5($_SERVER['REQUEST_METHOD'].":".$data['uri']); 

     // Generate the valid response. 
     $val_response = md5($A1.":".$data['nonce'].":".$data['nc'].":".$data['cnonce'].":".$data['qop'].":".$A2); 

     // Compare the valid response with the given response. 
     if ($data['response'] != $val_response) { 

      // Display the login again. 
      $this->show_auth(); 

     } else { 

      // Return true. 
      return true; 

     } 

    } 

} 

}

Alors, imaginez le usr_password de $ = "test" sera $ usr_password = md5 ("test");

Comment puis-je comparer les mots de passe?

Merci.

Répondre

1

La fonction MD5 est fonction de hachage, méthode unidirectionnelle pour produire le même résultat pour la même entrée.

Ainsi, pour comparer $password1 à $password2 sans révéler (directement comparaient) tous les deux, il devrait être suffisant pour comparer leurs hash:

$hash1 = md5($password1); // hash for pass 1 
$hash2 = md5($password2); // hash for pass 2 

if ($hash1 === $hash2) { 
    // here goes the code to support case of passwords being identical 
} else { 
    // here goes the code to support case of passwords not being identical 
} 

Est-il assez clair? Faites le moi savoir.

+0

Je sais comment ça fonctionne, mais pas comment la comparaison des mots de passe est géré dans le processus d'authentification HTTP. – Roel

2

Pensez également à utiliser SHA http://php.net/manual/en/function.sha1.php

+0

Sha1 ou MD5, à la fois pour moi. Je vais jeter un oeil à sha1. Merci. – Roel

+0

La plupart des navigateurs ne supportent au mieux que MD5, donc vous ne pouvez pas simplement utiliser SHA1, si ce sont vos clients. – DanMan

Questions connexes