8797 sujets

Développement web côté serveur, CMS

Bonjour par ici,

J'ai quelques soucis avec la fonction md5(). Je souhaites crypter les mots de passe des utilisateurs de mon site, j'ai donc pensé à la fonction md5().

Lorsque qu'un utilisateur s'incrit sur mon site, le mot de passe est crypté via md5().

Exemple, lorsque l'utilisateur choisi "bonjour" comme mot de passe, il est enregistré dans la bdd comme "f02368945726d5fc2a14eb576f7276" . Jusque là, tout va bien.

Seulement lorsque l'utilisateur souhaite se logguer, j'ai également utilisé md5() pour crypter le mot de passe saisi par l'utilisateur, seulement avec le même mot de passe, qui est toujours "bonjour", celui ci est crypté "f02368945726d5fc2a14eb576f7276c0"...

Donc forcement l'utilisateur ne peut pas se logguer puisque ces 2 variables sont au final différentes.

Merci à vous encore une fois Smiley cligne
Modifié par Howard (02 Nov 2006 - 16:07)
Bonjour.


a écrit :
"f02368945726d5fc2a14eb576f7276" . Jusque là, tout va bien.


... ben, non, justement. La chaîne md5 fait 32 caractères, et vous en avez perdu 2. Smiley decu

Alors ?
- avez vous dimensionné un champ de BD à 30 caractères, en quel cas vous perdez systématiquement vos deux caractères au moment de l'enregistrement...

En tout cas, c'est quelque part dans la chaîne d'aquisition.

Il vous reste la solution provisoire de ne comparer qu'une partie de la chaîne. C'est à dire les 30 premiers caractères.
GeorgesM a écrit :
Il vous reste la solution provisoire de ne comparer qu'une partie de la chaîne. C'est à dire les 30 premiers caractères.

Surtout pas, il recommence.
Il pourra recommencer autant qu'il veut, si son mot de passe est enregistré dans la base de donnée sur 30 caractères et qu'il est codé en direct sur 32, il n'arrivera à rien.

Je pense que vous envisagez des problèmes de sécurité, mais même sur 30 caractères, elle est à peine ébréchée... (noublions pas que les cartes de crédits, par exemple, n'utilisent que 4 chiffres)

Ce qui compte, c'est la concordance entre ce qui est tapé et ce qui est attendu...
Si plusieurs visiteurs ont déjà enregistré leur mot de passe, le seul moyen de les réutiliser est de ne faire la comparaison que sur les 30 premiers carcatères, et ceci tant que la base de donnée n'est pas réparée.
Oh merci ! C'etait effectivement le champ de la bbd qui etait à 30 caract max... je n'aurais jamais été voir si le pb venait de là.

Merci beaucoup Smiley smile
Et attention au md5 !

La plupart des utilisateurs n'utilisent que quelques lettres comme mot de passe, et on voit fleurir en ce moment moult sites qui propose de trouver une collision voire même le mot de passe à partir du md5... Mieux vaut utiliser un sha-1 ou autre algo de hash
Aïe, j'ai un autre soucis...

J'utilise deux champs type password (mdp1 et mdp2) dans mon formulaire d'inscription, et lorsque je souhaite les recuperer avec $_POST, le premier ok, mais le 2e est récupéré avec comme valeur "Array" !

Vs avez deja vu ce probleme ?
GeorgesM a écrit :
Il pourra recommencer autant qu'il veut, si son mot de passe est enregistré dans la base de donnée sur 30 caractères et qu'il est codé en direct sur 32, il n'arrivera à rien.

C'est bien ce que j'ai dit : il recommence et corrige son champ, redistribue des passes provisoires à ses internautes, bref, il corrige sa table et rien d'autre


Howard a écrit :
et lorsque je souhaite les recuperer avec $_POST, le premier ok, mais le 2e est récupéré avec comme valeur "Array" !

Suffit de leur donner un nom différent.
Nonon ils avaient bien des noms différents. J'ai trouvé d'ou venait le probleme... lors de mon test avec l'expréssion reguliere eregi()... je l'ai mal utilisé, eregi([a-z]...,$mdp1,$mp2) alors qu'il fallait faire un eregi pour chaque varaible séparement. J'en apprends pas mal en ce moment.
Je te conseille vivement l'emploi des PCRE bien plus rapide en lieu et place des POSIX
En clair :
preg_match à la place de eregi.
Bonjour,
J'ai un expose MD5 a realiser,je dois avoir une implementation complete.est ce ke kk'un pourrait m'aider a realiser ce bout de code.

merci