Probleme decryptage mot de passe

Eléphanteau du PHP | 15 Messages

02 janv. 2008, 22:42

Bonsoir a tous,

Je debute en php et j ai recupere ici un tutoriel sur la cryptologie :)
Je suis en train de creer un espace membre ou les emails et mots de passe sont codes mcrypt.
http://www.phpfrance.com/tutoriaux/inde ... rypt-ripat

Lorsqu un utilisateur oublie ses identifiants, il a juste a saisir son email.
L email du formulaire est alors encode pour pouvoir verifier qu il existe dans la BDD recupere le pseudo et le mot de passe. Si l email utilisateur existe, alors le script envoie un mail avec les identifiants (login et pass).

Le probleme est que lorsque le mail est envoye, le pass est toujours crypte alors qu il est bien declare avec les variables comme devant etre decrypte selon la methode utilise sur le tutoriel :/

Voici la fin du code
<?
$req = mysql_query("SELECT Pseudo, Passe1 FROM membres WHERE Email='$email_crypte'");          
$resultat = mysql_num_rows($req);
if ($resultat < 1)
$message .= "Vous avez specifie une adresse Email inexistante<br/>";  
mysql_close(); 

// si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur)) {

  include ('./erreur_passe_oublie.html');

// sinon c'est ok

} else {
require('./foulensois/dbconnect.inc');
  foreach($_POST as $index => $valeur) {
    $$index = mysql_real_escape_string(trim($valeur));
  }

list($Pseudo, $passe1_decrypte) = mysql_fetch_row($req);
@mail($email_decrypte, "Identifiants de $Pseudo ", "Cher $Pseudo,\nVous trouverez ci joint les informations concernant votre identification :\n
\nPseudo: $Pseudo
\nPasse : $passe1_decrypte
", "From: [email protected]");
?> 
Si vous avez une idee pour que les utilisateurs recuperent par mail leur bon pass et non celui crypte
Modifié en dernier par Foulensois le 02 janv. 2008, 23:33, modifié 1 fois.

ViPHP
ViPHP | 1996 Messages

02 janv. 2008, 23:00

Je n'arrive pas à voir où tu décriptes ton MDP.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 15 Messages

02 janv. 2008, 23:11

Voila la partie cryptage qui est presque la meme que dans le tutoriel. Je pense que ca doit venir d une declaration de variable mal faite '$Passe1' mais comme je debute, c est pas evident a debugger
<?
// Recuperation du codage de l email et du passe1
$algo = "blowfish"; // ou la constante php MCRYPT_BLOWFISH
$mode = "nofb"; // ou la constante php MCRYPT_MODE_NOFB
// calcul des longueurs max de la clé et de l'IV
$key_size = mcrypt_module_get_algo_key_size($algo);
$iv_size = mcrypt_get_iv_size($algo, $mode);
// création d'un IV aléatoire de la bonne longueur
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
// choix d'une clé secrète de cryptage/décryptage et mise à longueur
$cle = "mon cryptage";
$cle = substr($cle, 0, $key_size);
// Phrase à crypter et cryptage
$email_encrypt = "$Email";
$email_crypte = mcrypt_encrypt($algo, $cle, $email_encrypt, $mode, $iv);
$passe1_encrypt = "$Passe1";
$passe1_crypte = mcrypt_encrypt($algo, $cle, $passe1_encrypt, $mode, $iv);
//Décryptage
$email_decrypte = mcrypt_decrypt($algo, $cle, $email_crypte, $mode, $iv);
$passe1_decrypte = mcrypt_decrypt($algo, $cle, $passe1_crypte, $mode, $iv);

?>

ViPHP
ViPHP | 1996 Messages

02 janv. 2008, 23:17

Ce que je voulais dire c'est que entre
list($Pseudo, $passe1_decrypte) = mysql_fetch_row($req);
et
@mail($email_decrypte, "Identifiants de $Pseudo ", "Cher $Pseudo,\nVous trouverez ci joint les informations concernant votre identification :\n 
Je ne vois pas où tu décriptes... Comprends tu ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 15 Messages

02 janv. 2008, 23:29

En fait, j appelle juste la variable qui a ete defini plus haut dans le script, c est a dire $passe1_decrypte et $email_decrypte.
Je pensais que cela suffisait pour que le decryptage soit fait.

Il faudrait donc que je reecrive une portion du code entre ces 2 lignes meme si je l ai declare plus haut ?

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

ViPHP
ViPHP | 1996 Messages

02 janv. 2008, 23:34

Essaye cela :
<?
// Recuperation du codage de l email et du passe1
$algo = "blowfish"; // ou la constante php MCRYPT_BLOWFISH
$mode = "nofb"; // ou la constante php MCRYPT_MODE_NOFB
// calcul des longueurs max de la clé et de l'IV
$key_size = mcrypt_module_get_algo_key_size($algo);
$iv_size = mcrypt_get_iv_size($algo, $mode);
// création d'un IV aléatoire de la bonne longueur
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
// choix d'une clé secrète de cryptage/décryptage et mise à longueur
$cle = "mon cryptage";
$cle = substr($cle, 0, $key_size); 


$req = mysql_query("SELECT Pseudo, Passe1 FROM membres WHERE Email='$email_crypte'");          
$resultat = mysql_num_rows($req);
if ($resultat < 1)
$message .= "Vous avez specifie une adresse Email inexistante<br/>";  
mysql_close(); 

// si un champ est vide, on affiche le message d'erreur
if (strlen($message) > strlen($msg_erreur)) {

  include ('./erreur_passe_oublie.html');

// sinon c'est ok

} else {
require('./jpk62300/dbconnect.inc');
  foreach($_POST as $index => $valeur) {
    $$index = mysql_real_escape_string(trim($valeur));
  }

list($Pseudo, $passe1_crypte) = mysql_fetch_row($req);
$passe1_decrypte = mcrypt_decrypt($algo, $cle, $passe1_crypte, $mode, $iv);
@mail($email_decrypte, "Identifiants de $Pseudo ", "Cher $Pseudo,\nVous trouverez ci joint les informations concernant votre identification :\n
\nPseudo: $Pseudo
\nPasse : $passe1_decrypte
", "From: [email protected]");
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 15 Messages

02 janv. 2008, 23:44

Merci beaucoup Aureusms, ca marche desormais. Dire que certains me forcaient a regenerer un mot de passe et de repasser un coup de MD5 :)

La variable, meme si celle est declaree plus haut doit elle toujours etre rappelee avant son execution ?

ViPHP
ViPHP | 1996 Messages

02 janv. 2008, 23:56

Oui et non j'ai repris une portion de ton code pour que cela marche mais selon ton code
$passe1_decrypte = mcrypt_decrypt($algo, $cle, $passe1_crypte, $mode, $iv); 
le processus à besoin de toute les variables et surtout $algo, $cle, $mode, $iv. Si tu veux tu peux mettre le tout dans une fonction de décryptage/cryptage ca t'éviteras de créer tes lignes de codes inutiles :

function decryptage_encryptage ($valeur,$mode) {

$algo = "blowfish"; // ou la constante php MCRYPT_BLOWFISH
$mode = "nofb"; // ou la constante php MCRYPT_MODE_NOFB
$key_size = mcrypt_module_get_algo_key_size($algo);
$iv_size = mcrypt_get_iv_size($algo, $mode);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

$cle = "mon cryptage";
$cle = substr($cle, 0, $key_size);

if ($mode == "encrypter") $valeur_return = mcrypt_encrypt($algo, $cle, $valeur, $mode, $iv);
else                             $valeur_return = mcrypt_decrypt($algo, $cle, $valeur, $mode, $iv);

return $valeur_return ;
}

//pour appeler la fonction 
$mot_a_crypter = "essai";

$valeur_retournee = decryptage_encryptage ($mot_a_crypter, "encrypter");
echo $valeur_cryptee.'<BR/>';
$valeur_decryptee = decryptage_encryptage ($valeur_cryptee, "désencrypter");
echo $valeur_decryptee .'<BR/>'; //affichage du mot essai

It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 1996 Messages

02 janv. 2008, 23:59

Au fait le MD5 n'est PAS un mode de cryptage c'est du HASHAGE. En clair après md5($valeur); tu ne peux pas revenir en arrière.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

03 janv. 2008, 01:33

Modération :
Foulensois, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute