IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[MD5] Comparer 2 chaînes de caractères


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 72
    Par défaut [MD5] Comparer 2 chaînes de caractères
    Bonjour,

    la solution est certainement simple mais je n'y arrive pas.

    j'ai deux chaînes de caractères produites par la fonction de cryptage md5().
    elles sont sauvées dans 2 variables du style $mdp1=md5("password"); .

    comment vérifier leur égalité et inégalité ?

    même si elles sont égales (vérifié par affichage), le test "$mdp1 != $md2" est toujours accepté.
    j'ai essayé la fonction strcmp($mdp1,$mdp2), elle retourne apparemment toujours -18 lorsqu'elles sont égales et 1 ou -1 sinon (testé avec différents mots de passe).
    que fait-t-elle exactement, elle compare les tailles des chaines ? (qui est toujours la même avec le md5, non?)

    y a-t-il une fonction qui m'aie échappée?

    merci d'avance

    à bientôt

  2. #2
    Membre chevronné Avatar de johweb
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Par défaut
    Peux-tu nous donner un extrait de ton code ?

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 72
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    $login = $_POST["login"];
    $mdp = $_POST["mdp"];
     
    $query = 'SELECT * FROM Compte WHERE Login_Com="'.$login.'"';
    $result = mssql_query($query, $id_connexion);
     
    if( mssql_num_rows($result)==0 )
    {
      $error = "Erreur d'authentification (login incorrecte) ! Veuillez réessayer !";
    }
    else
    {
      $mdpcrypt = md5($mdp);
      $compte = mssql_fetch_array($result);
      if( $mdpcrypt != $compte["Mdp_Com"] )
      {
         $error = "Erreur d'authentification (mot de passe incorrecte) ! Veuillez réessayer !";
      }
      else
      {
        $error = "C'est bon!!!!";
      }
    }
    Je compare donc une chaine provenant d'une variable Post (puis cryptée) et un champ provenant d'une requête SQL (mdp crypté).

  4. #4
    Membre chevronné Avatar de johweb
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Par défaut
    Si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $login = $_POST["login"];
    $mdp = $_POST["mdp"];
     
    $query = 'SELECT * FROM Compte WHERE Login_Com="'.$login.'"';
    $result = mssql_query($query, $id_connexion);
     
    if( mssql_num_rows($result)==0 )
    {
      $error = "Erreur d'authentification (login incorrecte) ! Veuillez réessayer !";
    }
    else
    {
      $mdpcrypt = md5($mdp);
      $compte = mssql_fetch_array($result);
      echo $compte["Mdp_Com"];
    }
    peux-tu nous dire si tu as bien une valeur d'affichée ?

  5. #5
    Membre éclairé Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Par défaut
    Tu peux aussi tester directement dans ta requete sql:
    SELECT * FROM Compte WHERE Login_Com="'.$login.'" And Mdp_Com="'.md5($_POST['mdp']).'"

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 72
    Par défaut
    déjà, merci de vos réponses.

    Citation Envoyé par johweb
    peux-tu nous dire si tu as bien une valeur d'affichée ?
    et oui, j'ai comme prévu une chaine de 32 caractères.

    Citation Envoyé par nicoaix
    Tu peux aussi tester directement dans ta requete sql:
    SELECT * FROM Compte WHERE Login_Com="'.$login.'" And Mdp_Com="'.md5($_POST['mdp']).'"
    oui, je pourrais aussi mais ca m'empecherais de savoir si c'esl le login ou le mot de passe qui est faux.
    mais si je n'arrive pas autrement, j'essaierai comme ca.

  7. #7
    Membre éclairé Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Par défaut
    C'est assez bizarre ton problème.
    J'utilise un principe similaire au tien et ca fonctionne sans problème.
    Regarde ce que te retournes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo $mdpcrypt;
    echo "<br />";
    echo $compte["Mdp_Com"];
    Verifie si les 2 chaines sont au moins similiaires.
    Fait un echo sur $mdp aussi, voir si cela correspond bien à ce que tu as entré.

    ++
    ShinJava

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 72
    Par défaut
    Citation Envoyé par ShinJava
    Regarde ce que te retournes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo $mdpcrypt;
    echo "<br />";
    echo $compte["Mdp_Com"];
    Verifie si les 2 chaines sont au moins similiaires.
    Fait un echo sur $mdp aussi, voir si cela correspond bien à ce que tu as entré.
    J'ai déjà fais mais j'ai réessayé...et c'est toujours pareil.

    J'ai créer un compte login=test et mdp=password.
    Voilà ce qu'il s'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    password
    5f4dcc3b5aa765d61d8327deb882cf99
    5f4dcc3b5aa765d61d8327deb882cf99
    A moins que mes noeils soient fous c'est la même chose non?

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Je te recommande d'éviter tous ces sites qui copient la doc PHP : il y a un site officiel (php.net), il est très fiable alors autant l'utiliser de préférence.
    Sinon, je te déconseille d'utiliser strcmp() si tu souhaites simplement vérifier l'équivalence : l'opérateur == est amplement suffisant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(md5($_POST['mdp']) == $bidule){
       // ...
    }

  10. #10
    Membre éclairé Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Par défaut
    Alors la je dois aussi avoir un problème au noeil noeil...
    Ton message d'erreur c'est bien :
    Erreur d'authentification (mot de passe incorrecte) ! Veuillez r&eacute;essayer !
    et non
    Erreur d'authentification (login incorrecte) ! Veuillez r&eacute;essayer !

    ?

    ++
    ShinJava


    EDIT : yogui à raison sur la comparaison. J'utilise generalement == que != , je ne sais plus pour quel obscure raison j'avais opté pour cela.

  11. #11
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 72
    Par défaut
    Bonjour tout le monde!

    Citation Envoyé par ShinJava
    Ton message d'erreur c'est bien :
    Erreur d'authentification (mot de passe incorrecte) ! Veuillez r&eacute;essayer !
    oui, c'est bien ca. (revérifié encore une énième fois pour être sûr... )

    EDIT : yogui à raison sur la comparaison. J'utilise generalement == que != , je ne sais plus pour quel obscure raison j'avais opté pour cela.
    idem, toujours le même résultat...

  12. #12
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 82
    Par défaut
    ta écri mssql_num... ce seré pa mysql_num ....

  13. #13
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 82
    Par défaut
    oups ... autant pour moi ... je ne connaissais pas ... j'ai rien dis !!

  14. #14
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 72
    Par défaut
    Citation Envoyé par nicoaix
    Tu peux aussi tester directement dans ta requete sql:
    SELECT * FROM Compte WHERE Login_Com="'.$login.'" And Mdp_Com="'.md5($_POST['mdp']).'"
    En attendant de trouver mieux, je fais comme ca. Ca fonctionne.

    Mais pourquoi, ca ne veux pas avec l'autre solution???

  15. #15
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Ne cherche pas plus loin, c'est ça la meilleure solution

  16. #16
    Membre éclairé Avatar de ShinJava
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    413
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 413
    Par défaut
    Citation Envoyé par Yogui
    Ne cherche pas plus loin, c'est ça la meilleure solution
    Oui mais c'est assez mystique quand meme...
    Logiquement sa solution aurait du fonctionnait

    Peut être en faisant ainsi dans le if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( (md5($mdp)) != $compte["Mdp_Com"] )
    ??

    ++
    ShinJava

  17. #17
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 72
    Par défaut
    Citation Envoyé par ShinJava
    Peut être en faisant ainsi dans le if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( (md5($mdp)) != $compte["Mdp_Com"] )
    pas mieux...

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/07/2008, 20h31
  2. Comparator et chaînes de caractères
    Par Llaur76 dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2007, 11h16
  3. Comparer deux chaînes de caractère
    Par natie_49 dans le forum Langage
    Réponses: 2
    Dernier message: 28/03/2007, 11h53
  4. Comparer deux chaînes de caractères
    Par camoa dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 10/12/2006, 14h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo