Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/04/2006, 10h20   #1
Candidat au titre de Membre du Club
 
Étudiant
Inscription : avril 2005
Messages : 70
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2005
Messages : 70
Points : 14
Points : 14
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
wolflinger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 11h49   #2
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
Peux-tu nous donner un extrait de ton code ?
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 15h02   #3
Candidat au titre de Membre du Club
 
Étudiant
Inscription : avril 2005
Messages : 70
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2005
Messages : 70
Points : 14
Points : 14
Code :
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é).
wolflinger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 15h15   #4
Membre éclairé
 
Avatar de johweb
 
Inscription : décembre 2003
Messages : 332
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : décembre 2003
Messages : 332
Points : 316
Points : 316
Si tu fais :
Code :
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 ?
johweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 15h19   #5
Membre éclairé
 
Avatar de nicoaix
 
Homme
Chef de projet MOA
Inscription : décembre 2004
Messages : 561
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 37
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2004
Messages : 561
Points : 325
Points : 325
Tu peux aussi tester directement dans ta requete sql:
SELECT * FROM Compte WHERE Login_Com="'.$login.'" And Mdp_Com="'.md5($_POST['mdp']).'"
nicoaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 15h29   #6
Candidat au titre de Membre du Club
 
Étudiant
Inscription : avril 2005
Messages : 70
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2005
Messages : 70
Points : 14
Points : 14
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.
wolflinger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 16h30   #7
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
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 :
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
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 16h59   #8
Candidat au titre de Membre du Club
 
Étudiant
Inscription : avril 2005
Messages : 70
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2005
Messages : 70
Points : 14
Points : 14
Citation:
Envoyé par ShinJava
Regarde ce que te retournes :
Code :
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 :
1
2
3
4
 
password
5f4dcc3b5aa765d61d8327deb882cf99
5f4dcc3b5aa765d61d8327deb882cf99
A moins que mes noeils soient fous c'est la même chose non?
wolflinger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 17h16   #9
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
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 :
1
2
3
if(md5($_POST['mdp']) == $bidule){
   // ...
}
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 17h20   #10
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
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.
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2006, 09h46   #11
Candidat au titre de Membre du Club
 
Étudiant
Inscription : avril 2005
Messages : 70
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2005
Messages : 70
Points : 14
Points : 14
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... )

Citation:
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...
wolflinger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2006, 10h04   #12
Membre du Club
 
Inscription : avril 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 82
Points : 67
Points : 67
ta écri mssql_num... ce seré pa mysql_num ....
chtichokoko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2006, 10h06   #13
Membre du Club
 
Inscription : avril 2006
Messages : 82
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 82
Points : 67
Points : 67
oups ... autant pour moi ... je ne connaissais pas ... j'ai rien dis !!
chtichokoko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2006, 10h28   #14
Candidat au titre de Membre du Club
 
Étudiant
Inscription : avril 2005
Messages : 70
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2005
Messages : 70
Points : 14
Points : 14
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???
wolflinger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2006, 10h52   #15
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Ne cherche pas plus loin, c'est ça la meilleure solution
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2006, 13h59   #16
Membre confirmé
 
Avatar de ShinJava
 
Inscription : septembre 2004
Messages : 411
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 411
Points : 287
Points : 287
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 :
if( (md5($mdp)) != $compte["Mdp_Com"] )
??

++
ShinJava
__________________
Petit débutant deviendra grand... débutant
ShinJava est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2006, 14h30   #17
Candidat au titre de Membre du Club
 
Étudiant
Inscription : avril 2005
Messages : 70
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2005
Messages : 70
Points : 14
Points : 14
Citation:
Envoyé par ShinJava
Peut être en faisant ainsi dans le if :
Code :
if( (md5($mdp)) != $compte["Mdp_Com"] )
pas mieux...
wolflinger est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h32.


 
 
 
 
Partenaires

Hébergement Web