Crypter / Decrypter mon mot de passe

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Crypter / Decrypter mon mot de passe

par Fredy07 » 14 juil. 2009, 16:53

Je me connecte avec n'importe quel mot de passe ainsi qu'il me retourne pas le mot de passe décrypté

par Ryle » 14 juil. 2009, 15:57

Normal... le SELECT te retourne les informations que tu lui demandes et rien de plus. Si tu ne lui demandes pas de te retourner le username, tu ne l'auras pas. Si tu lui demandes de te retourner une information transformée (un mot de passe décrypté), tu ne peux pas le récupérer comme le mot de passe normal...
// Je demande à ma requête de retourner la valeur en base du username et du mot de passe décrypté, en donnant à ce dernier l'alias "pwd"
$sql = "SELECT username, AES_DECRYPT('".$cle."', '".$pass."') AS pwd
  FROM membres WHERE username='".$username."'";

...

if ($rows = mysql_fetch_array($resultat))
{ 
         $username = $rows['username']; // Je peux alors récupérer la valeur du champ "username"
         $pass = $rows['pwd']; // et la valeur du champ "pwd" qui correspond au mot de passe décrypté
} 

par Fredy07 » 14 juil. 2009, 15:44

Merci Ryle pour la réponse, alors ce que je veux faire en claire c'est:

1- Vérifier le mot de passe crypte dans la BD est le même saisi
2- Si l'utilisateur a perdu son mot de passe, on peut l'envoyer par e-mail afin qu'il puisse se connecter.
Pour l'authentification, il te suffit de crypter le mot de passe saisi par l'utilisateur et de le comparer avec ceux que tu as déjà en base :
$sql = "SELECT * FROM membres WHERE username='$username' AND pass = AES_ENCRYPT('".$cle."','".$pass."')";
Pour l'utilisateur qui a perdu son mot de passe, il te suffit de faire un
SELECT AES_DECRIPT('".$cle."', pass) FROM ...
pour récupérer le mot de passe décrypté de l'utilisateur (reste plus ensuite qu'à lui envoyer par mail par exemple :))

Ceci étant, il est effectivement préférable pour des raisons de sécurité, de chiffrer les mots de passe, ce qui empêche tout décryptage (et évite ainsi à des personnes mal intentionnées de découvrir des mots de passe personnels). Si l'utilisateur perd son mot de passe on lui en génère alors un nouveau qu'il pourra ensuite repersonnaliser :)
Malheureusement ca ne me retourne pas le mot de passe:
$sql = "SELECT AES_DECRYPT('".$cle."', '".$pass."') FROM membres WHERE username='$username'";

$resultat = mysql_query($sql) or die ('Impossible de selectionner: ' .mysql_error());

$total = mysql_num_rows($resultat);

$rows = mysql_fetch_array($resultat);
{
	 	$username = $rows['username'];
 		$pass = $rows['pass'];
}
}

if ($total)
{
	echo 'Vous etes '.$username. ' connectes<br>';
	echo 'Le mot de passe est: '.$pass. '<br>';
	
}

par Ryle » 13 juil. 2009, 14:29

Merci Ryle pour la réponse, alors ce que je veux faire en claire c'est:

1- Vérifier le mot de passe crypte dans la BD est le même saisi
2- Si l'utilisateur a perdu son mot de passe, on peut l'envoyer par e-mail afin qu'il puisse se connecter.
Pour l'authentification, il te suffit de crypter le mot de passe saisi par l'utilisateur et de le comparer avec ceux que tu as déjà en base :
$sql = "SELECT * FROM membres WHERE username='$username' AND pass = AES_ENCRYPT('".$cle."','".$pass."')";
Pour l'utilisateur qui a perdu son mot de passe, il te suffit de faire un
SELECT AES_DECRIPT('".$cle."', pass) FROM ...
pour récupérer le mot de passe décrypté de l'utilisateur (reste plus ensuite qu'à lui envoyer par mail par exemple :))

Ceci étant, il est effectivement préférable pour des raisons de sécurité, de chiffrer les mots de passe, ce qui empêche tout décryptage (et évite ainsi à des personnes mal intentionnées de découvrir des mots de passe personnels). Si l'utilisateur perd son mot de passe on lui en génère alors un nouveau qu'il pourra ensuite repersonnaliser :)

par dunbar » 13 juil. 2009, 14:04

2- Si l'utilisateur a perdu son mot de passe, on peut l'envoyer par e-mail afin qu'il puisse se connecter.
Salut,

Par principe n mot de passe est connu uniquement de l'utilisateur, alors pourquoi ne pas lui envoyer un nouveau mot de passe en cas d'oublie de celui-ci :?:

par Fredy07 » 13 juil. 2009, 13:26

Et comment envoyer le mot de passe décrypté aux utilisateurs??

par Fredy07 » 12 juil. 2009, 11:48

Merci Ryle pour la réponse, alors ce que je veux faire en claire c'est:

1- Vérifier le mot de passe crypte dans la BD est le même saisi
2- Si l'utilisateur a perdu son mot de passe, on peut l'envoyer par e-mail afin qu'il puisse se connecter.

par Ryle » 12 juil. 2009, 01:52

La commande "SELECT *" te retourne les valeurs des champs tels qu'ils sont stockés dans ta table et ne fait aucune opération dessus. Si tu veux que MySQL te retourne les mots de passe décryptés, il faut le lui demander explicitement, il ne peut pas le deviner ;)

Code : Tout sélectionner

SELECT AES_Decrypt('".$cle."', pass) FROM ...
Maintenant, il ne semble pas nécessaire dans ton cas de récupérer le mot de passe. Ce qui t'intéresse c'est de vérifier si le mot de passe saisi par l'utilisateur (en clair) correspond à celui qui est en base (crypté).

Il te faut donc soit crypter le mot de passe saisie pour le comparer à celui en base (c'est la solution proposé par stopher et pour laquelle la fonction de cryptage ou une fonction de chiffrage seule est suffisante), soit décrypter celui en base pour pouvoir le comparer à celui saisi.
Dans ton essai (pass = AES_Decrypt('".$cle."','".$pass."')) tu décryptes le mot de passe saisi pour le comparer à celui crypté en base... du coup forcément, il ne droit pas y avoir beaucoup de résultat ;)

par Fredy07 » 12 juil. 2009, 01:30

Normal, tu lui demandes de trouver l'enregistrement correspondant a la version decryptée d'une mot de passe qui n'est autre que le mot de passe décrypté.
Toute donnée que tu veux obtenir en sortie doit être préalablement choisie dans la clause SELECT.
Or, ici, tu ne demandes nullement a mysql de décrypter ton mot de passe dans la clause SELECT, je me trompe ?
Alors c'est quoi la solution de trouver le mot de passe décrypté et l'envoyer par e-mail.

Merci

par momox » 11 juil. 2009, 21:04

Normal, tu lui demandes de trouver l'enregistrement correspondant a la version decryptée d'une mot de passe qui n'est autre que le mot de passe décrypté.
Toute donnée que tu veux obtenir en sortie doit être préalablement choisie dans la clause SELECT.
Or, ici, tu ne demandes nullement a mysql de décrypter ton mot de passe dans la clause SELECT, je me trompe ?

par Fredy07 » 11 juil. 2009, 20:53

Normal te répondrais-je vu que c'est ce que tu lui demandes...
j'ai essaye avec:
$sql = "SELECT * FROM membres WHERE username='$username' AND pass = AES_Decrypt('".$cle."','".$pass."')"; 
et ça me dit que le login est incorrect :roll:

par momox » 11 juil. 2009, 20:48

Normal te répondrais-je vu que c'est ce que tu lui demandes...

par Fredy07 » 11 juil. 2009, 20:43

voila la requête que j'ai fait, mais il m'affiche le mot de passe crypte:
$sql = "SELECT * FROM membres WHERE username='$username' AND pass = AES_Encrypt('".$cle."','".$pass."')";

// continue de code ici

	echo $username. ' votre mot de passe est: '.$pass. '<br>';

par dunbar » 08 juil. 2009, 21:22

par Fredy07 » 08 juil. 2009, 21:16

Ce que je veux savoir c'est la méthode avec AES_ENCRYPT et AES_DECRYPT, comment envoyer le vrai mot de passe de l'utilisateur.