Page 1 sur 1

Changer mot de passe PHP/CRYPTAGE

Posté : 29 avr. 2012, 19:39
par Bodyfull
Salut,

Je veux comparer le mot de passe rentré dans un formulaire avec celui stocké actuellement dans la BDD.
Or, le mot de passe stocké dans la BDD est crypté, et je bloque :
     // Là je tente de crypter le mot de passe rentré dans le form.
             $verification_pass = hash('sha256', $_POST['pass']);   
             $verification_pass1 = createSalt();
             $verification_pass2 = hash('sha256', $verification_pass1 . $verification_pass);
	    // Et ici de comparer les deux chaines cryptées voir si elles sont bien identiques.
            if($requete_array['password'] != $verification_pass2)
            {
                $show_err[] = 'Le mot de passe actuel est erroné !';
                $err = 1;
            }
Soucis, cela ne fonctionne pas car cela me dit constamment que le mot de passe actuel est érroné ! :(
Comment faire ?

Merci à vous !

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 29 avr. 2012, 20:15
par xTG
Les mots de passe de la BDD ont-ils été cryptés suivant ce procédé ?
Notamment il faudrait vérifier la fonction createSalt() et confirmer qu'entre temps elle n'a pas évolué.

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 29 avr. 2012, 20:31
par moogli
Et est ce que le grain de sel est toujours le même ?

Si ce n'est pas le même il faut qu'il soit stocké quelque part pour le réutiliser (donc en base? Tbrecupere mot de passe et grain de sel et tu compare avec le hash reconstitué à partir de l'info de la dB).

Pour info on ne parle pas la de cryptage mais de hashage la différence essentielle c'est que le premier est réversible pas le second ;)

@+

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 30 avr. 2012, 23:08
par Bodyfull
Bonsoir,

Oui, tout a été effectué de la même manière, même grain de sel.
Et c'est effectivement ce que je cherche à faire, comparer le mot de passe rentré avec celui utilisé dans la BDD.

Pour l'instant, j'ai fais comme ceci (c'est comme ça que je vérifie si le MDP est correct à la connexion) :
                    $verification = mysql_fetch_array($requete, MYSQL_ASSOC);
                    $ash = hash('sha256', $verification['salt'] . hash('sha256', $_POST['pass']));
                   
                    if($ash != $verification['password'])
                    {
						$show_err[] = 'Le mot de passe ne correspond pas celui utilisé actuellement !';					
                        $err = 1;
                    }
Mais cela ne passe pas...
$requete récupère les données de l'utilisateur qui a une session ouverte, $_POST['pass'] est le mot de passe rentré dans le formulaire.

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 30 avr. 2012, 23:13
par xTG
On peut voir le code d'insertion de ces mots de passe dans la BDD ? (Et notamment la façon dont ils ont été hashé)

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 01 mai 2012, 10:23
par Bodyfull
A l'inscription, c'est fais comme ceci :
                // On hash le mot de passe.
                $dmx_password_hash = hash('sha256', $_POST['password']);
                // On crée une valeur de salage.
                $dmx_user_salt = createSalt();
                // On crée l'ash.
                $dmx_user_password = hash('sha256', $dmx_user_salt . $dmx_password_hash);
C'est ça que vous vouliez voir ? :?

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 01 mai 2012, 10:31
par xTG
Bon donc on est d'accord sur l'enchaînement, montres nous la fonction createSalt() maintenant.

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 01 mai 2012, 11:20
par Bodyfull
	function createSalt()
    {
        $string = md5(uniqid(rand(), true));
        return substr($string, 0, 3);
    }
Voilou :)

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 01 mai 2012, 12:21
par xTG
Dans ce cas j'espère que c'est bien le retour de cette fonction qui est enregistré en bdd pour $verification['salt'].
Et qu'il n'y a pas eu de chaînes coupées lors de l'insertion en bdd.

Car sinon, on ne peut que soutenir que ton code est correct.
Donc si cela ne fonctionne pas, c'est que véritablement le mdp est incorrect, ou que le mdp hashé a été coupé ou bien son salt.

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 01 mai 2012, 13:00
par Bodyfull
Impossible !

Cela fonctionne à la connexion, lorsqu'on vérifie le MDP, pourquoi ça ne fonctionnerait pas ici. :(
*****************************************************
*     On va chercher les informations du membre     *
*****************************************************
*/    

$requete = mysql_query("SELECT * FROM users WHERE email = '". $_SESSION['dmx_email'] ."'");
$requete_array = mysql_fetch_array($requete);

/*
*****************************************************
*     On va chercher les informations du membre     *
*****************************************************
*/  

	if(isset($_POST['submit_pass']))
	{
	
			// On vérifie que le nouveau mot de passe est correct.     
            if((strlen($_POST['pass_news']) < dmx_config_passminlength) || (strlen($_POST['pass_news']) > dmx_config_passmaxlength))
            {
                $show_err[] = 'Le nouveau mot de passe doit être compris entre 6 et 32 caractères !<br />';
                $err = 1;
            }
			
            if($_POST['pass_news'] != $_POST['pass_news_confirm'])
            {
                $show_err[] = 'Les mots de passes inscrits ne sont pas identiques !<br />';
                $err = 1;
            }	

                    $verification = mysql_fetch_array($requete, MYSQL_ASSOC);
                    $ash = hash('sha256', $verification['salt'] . hash('sha256', $_POST['pass']));
                   
                    if($ash != $verification['password'])
                    {
						$show_err[] = 'Le mot de passe ne correspond pas celui utilisé actuellement !';					
                        $err = 1;
                    }

				if ($err != 1)
				{
                    $nouveau_salage = createSalt();
                    $nouveau_pass = hash('sha256', $nouveau_salage . hash('sha256', $_POST['pass_news_confirm']));
                    mysql_query("UPDATE users SET password = '$nouveau_pass', salt = '$nouveau_salage' WHERE id = '" . $requete_array['id'] . "'");
				}
				
			else
			{
            echo '<div style="margin-bottom: -20px;" class="error-box2">';
            echo join('',$show_err);
            echo '</div>';
			}
	
	}

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 01 mai 2012, 18:21
par moogli
la ligne
$verification = mysql_fetch_array($requete, MYSQL_ASSOC);

est de trop $verification doit valoir false étant donné que tu fait déja un mysql_fetch_array() ligne 7 (et que je suppose que tu n'a qu'un résultat par adresse mail dans la table ?

donc utilise $requete_array ou garde cette ligne et vire la ligne 7

pour info y a des chances que php se vautre dans les chaine de caractère vu les nom de variable
par exemple :
"UPDATE users SET password = '$nouveau_pass', salt = '$nouveau_salage' WHERE id = '" . $requete_array['id'] . "'"

vu qu'a priori, tu connais la concaténation utilise la pour chaque variable.
pourquoi ? parce que :
- c'est plus clair
- plus lisible
- pas de risque que la parseur se vautre en cherchatn ce qu'il doit remplacer

@+

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 01 mai 2012, 18:41
par Bodyfull
Salut,

C'était ça !!

Le fait de re-spécifier un tableau.. :D
J'ai ajouté quelques petits trucs pour sécuriser et je vais voir pour ton conseil, j'ai du boulot qui m'attends !

Encore merci à cette fabuleuse communauté !! :wink:

Re: Changer mot de passe PHP/CRYPTAGE

Posté : 01 mai 2012, 19:29
par moogli
de rien !)

je te conseil aussi d'afficher les erreurs tu aurais trouvé seul => error_reporting c'est obligatoire en phase de dev sinon tu t'en sort pas (ou t'est très bon a voir :mrgreen: ).

@+