Se connecter avec
S'enregistrer | Connectez-vous

[résolu]recupération d'un MDP crypté dans Mysql

Dernière réponse : dans Programmation

Bonjour tout le monde,

actuelement, je suis en train de developpé un portail PHP/MYSQL, et j'en suis a l'élaboration du code permattant d'identifier les utilisateurs.
mon probleme, etant donnée que le portail vas se trouver sur un serveur tier gratuit, est que je crypte les mots de passes des utilisateurs dans la DB MYSQL.
j'utilise la fonction PASSWORD() ou MD5().
Mon probleme se situe au niveau de la récupération de la donnée crypté.
j'ai recherché sur le site de Mysql ou divers tutoriaux, mais lorsque j'insere le code suivant:
  1. INSERT INTO `user` ( `username` , `password` , `adsit` , `supadsit` , `valid` )VALUES ('user', password('test'), '1', '1', '1');

je me retrouve dans la base SQL avec un mot de passe du type : 378b243e220ca493, donc crypté comme souhaité.
le probleme final, c'est que je n'arrive pas a retrouver la ligne de commande me permetant de sortir le mot de passe en clair.
si je fait un :
  1. select * from user ...

je me retrouverai danc avec non pas le mot de passe en clair, mais avec la chaine crypté.
est ce que quelqu'un aurait une idée pour sortir la chaine en clair s'il vous plait ^^

merci d'avance ^^

PS:
MySQL 4.1.9
Lassé par la pub ? Créez un compte
Expert Programmation

le but est justement de ne pas pouvoir retrouver le mot de passe à partir de cette chaine cryptée ...

tu peux essayer en local avec des logiciels de cassage mais si les mots de passe sont long ça va te prendre du temps :) ))

serieusement : faut que tu crypte le mot de passe entré par l'utlisateur et que tu le compare avec ce qui est stocké dans ta base. si c'est la même chose alors youpi

j'ai trouver une seule solution pour l instant, c'est justement de cree un champs supplementaire dans ma table dans lequel j'entre le mot de passe tapé par l utilisateur en crypté, ensuite j'extrait les 2 et je les comparent.
mais ca prendre encore du temps de traitement
je ne sait pas comment faire pour crypté directement le mot de passe entré par l utilisateur et le comparé avec celui qui est dans la DB.
j'utilise PHP5 mais je ne croit pas qu'il puisse crypté le mot de passe.
a moin que je fasse un requete sql du type:
  1. SELECT * FROM `user` WHERE `username` = 'userrentré' AND `password` = PASSWORD('passwordrentré')

mais je ne sait pas si ca passerai :/ 

sisi c'est comme ca qu'il faut faire ;) 

je ne sais pas l'algorithme utilisé par la méthode "password" de mysql mais le md5, lui, est un algorithme de hashage et non de cryptage. ce qui signifie qu'il est impossible de retrouver la chaine original d'apres la chaine hashée. enfin, presque ! il y a moyen avec les "rainbow tables" mais bon ...

pour ca, vaux mieux utiliser SHA-1...
Expert Programmation

Citation :
sisi c'est comme ca qu'il faut faire ;) 

je ne sais pas l'algorithme utilisé par la méthode "password" de mysql mais le md5, lui, est un algorithme de hashage et non de cryptage. ce qui signifie qu'il est impossible de retrouver la chaine original d'apres la chaine hashée. enfin, presque ! il y a moyen avec les "rainbow tables" mais bon ...

pour ca, vaux mieux utiliser SHA-1...


Citation :
Sinon il y a la fonction PHP 'MD5' tout simplement ... Pour le crypter avant de l'injecter dans la base ... et tu n'auras plus qu'a comparer ton champ en PHP plutot que dans ta requete ...

A voir ;) 

edit: et la fonction SHA1 si tu veux vraiment un cryptage fort dans ta BDD


C'est quoi la différence entre ces 2 messages :o 

Boub, tu radotes :D 

bon, le code
  1. SELECT * FROM `user` WHERE `username` = 'userrentré' AND `password` = PASSWORD('passwordrentré')

ne fonctionne pas :cry: 
la fonction PASSWORD() n'a pas l'air de passer en select :/ 
j'ai contourner la chose en utilisant ENCODE/DECODE('motdepass','indexencryptage') et en utilisant une cle d'encyptage predefini dans une variable.
ainsi en inserant la donné avec :
  1. INSERT INTO `user` ( `username` , `password` )VALUES ('user', ENCODE('password','cledecryptage');

et pour recuperer j'utilise:
  1. SELECT * FROM `user` WHERE `username` = 'userrentré' AND `password` = DECODE('passwordrentré','cledecryptage')

et ca fonctionne sans probleme ^^
Expert Programmation

Citation :
bon, le code
  1. SELECT * FROM `user` WHERE `username` = 'userrentré' AND `password` = PASSWORD('passwordrentré')

ne fonctionne pas :cry: 
la fonction PASSWORD() n'a pas l'air de passer en select :/ 
j'ai contourner la chose en utilisant ENCODE/DECODE('motdepass','indexencryptage') et en utilisant une cle d'encyptage predefini dans une variable.
ainsi en inserant la donné avec :
  1. INSERT INTO `user` ( `username` , `password` )VALUES ('user', ENCODE('password','cledecryptage');

et pour recuperer j'utilise:
  1. SELECT * FROM `user` WHERE `username` = 'userrentré' AND `password` = DECODE('passwordrentré','cledecryptage')

et ca fonctionne sans probleme ^^
Faut pas de ' ' autour de user, username et password ;) 


Citation :
Kangol citait les algo moi les fonctions :o 
Mauvaise foi, foutage de gueule, toussa :D 

Citation :
Faut pas de ' ' autour de user, username et password

mais il faut bien balisé les donnée non ?
pour PASSWORD(), a la limite, mais si je ne balise pas le :
  1. where `username` = user

ca risque de me faire une erreur non ?

oui, mais la ou ca bloque, c'est au niveau de passord()
si je tape :
  1. select * from user where username = 'user' and password = PASSWORD('password')

ou
  1. select * from user where username = 'user' and password = PASSWORD(password)

c'est le PASSWORD() qui ne passe pas en syntaxe
Lassé par la pub ? Créez un compte