Connection avec mot de pass hashé

Nouveau WRInaute
Bonjour, j'ai codé un petit formulaire pour permettre à l'administrateur d'ajouter des gens au site.
J'ai donc hasher le mdp avec la fonction crypt()

Code:
<FORM Method="POST" Action="">
        Prénom : <input type="text" name="pre" size=10 <br></br>
        Nom : <input type="text" name="nom" size=20 <br></br>
        Date de naissance :<input type="text" name="date" size=20 <br></br>
 Login :<input type="text" name="login" size=20 <br></br>
 Mdp :<input type="text" name="mdp" size=20 <br></br>
<br></br>
        <input type="submit", name="submit" Value="Ajouter"> 
 <?php

include 'fonctions.connect.php';

if ($_POST['pre']!='' && $_POST['nom']!='' && $_POST['date']!=''&& $_POST['login']!=''&& $_POST['mdp']!='')

{

$pre = mysql_real_escape_string($_POST['pre']); 
$nom = mysql_real_escape_string($_POST['nom']); 
$date = mysql_real_escape_string($_POST['date']); 
$login = mysql_real_escape_string($_POST['login']);
$mdp = mysql_real_escape_string($_POST['mdp']);
$hash  = (crypt($mdp));


    
    $sql = "INSERT INTO users (prenom,nom,date_naissance,username,password)
VALUES ('$pre','$nom','$date','$login','$hash')";


mysql_query($sql) or die(mysql_error()) ;

}


Il se rentre bien dans ma BD hashé. Cependant je n'arrive pas à ma connecter avec les comptes. J'ai du me tromper quand j'ai rajouter la condition du hashage dans le code de ma connection. Voici le code :

Code:
<?php
include('config2.php');
//Si lutilisateur est connecte, on le deconecte
	if(isset($_SESSION['username']))
	{
        //On le deconecte en supprimant simplement les sessions username et userid
        unset($_SESSION['username'], $_SESSION['userid']);
	header("location: index.html" );
?>
<?php
}
else
{
        $ousername = '';
        //On verifie si le formulaire a ete envoye
        if(isset($_POST['username'], $_POST['password']))
        {
                //On echappe les variables pour pouvoir les mettre dans des requetes SQL
                if(get_magic_quotes_gpc())
                {
                        $ousername = stripslashes($_POST['username']);
                        $username = mysql_real_escape_string(stripslashes($_POST['username']));
                        $password = stripslashes($_POST['password']);
                }
                else
                {
                        $username = mysql_real_escape_string($_POST['username']);
                        $password = $_POST['password'];
			
                }
                //On recupere le mot de passe de lutilisateur
                $req = mysql_query('select password,id,rang from users where username="'.$username.'"');
                $dn = mysql_fetch_array($req);
                //On le compare a celui quil a entre et on verifie si le membre existe
                if($dn['password']==$password and mysql_num_rows($req)>0)
                {
                        //Si le mot de passe es bon, on ne vas pas afficher le formulaire
                        $form = false;
                        //On enregistre son pseudo dans la session username et son identifiant dans la session userid
                        $_SESSION['username'] = $_POST['username'];
                        $_SESSION['userid'] = $dn['id'];
                        $_SESSION['rang'] = $dn['rang'];
 
                         if(isset($_SESSION['rang']))
				{
   				if($_SESSION['rang']==1) header('location:index2.php');
   				else header('location:index3.php');
				}
                }
                else
                {
                        //Sinon, on indique que la combinaison nest pas bonne
 
                        echo 'La combinaison n\'est pas bonne.';
                       
                }
        }
        else
        {
 
        }
 
}        
?>

j'ai essayé de faire de deux façons :

1)

Code:
$password2 = stripslashes($_POST['password']);
                        $password = (crypt($password2));            
                }
                else
                {
                        $username = mysql_real_escape_string($_POST['username']);
                        $password2 = $_POST['password'];
                        $password = (crypt($password2));

marche pas.

2)
Code:
if($dn['password']==(crypt($password)) and mysql_num_rows($req)>0)
marche pas.
 
WRInaute occasionnel
J'ai pas analysé le code en détails, mais $_POST['password'] est bien haché avant la comparaison ?
Le seul moyen de comparer un hash est de le comparer à un autre hash.

Code:
$password = $_POST['password']; //non haché

$dn = mysql_fetch_array($req);
if($dn['password']==$password) //comparaison entre password haché et non haché = pass différents
 
Nouveau WRInaute
Dans le premier code que j'ai montré, celui de la page connexion, il n'est pas haché, je voulais vous montrer la page sans ajouts encore. Ensuite j'ai proposé mes deux solutions, je hache le mdp une fois récupéré dans la variable et je le compare au mot de passe haché dans ma BD. Je ne comprends pas d’où viens l'erreur.
 
WRInaute impliqué
Code:
//Si lutilisateur est connecte, on le deconecte
   if(isset($_SESSION['username']))
   {

c'est une drôle d'idée. tu essaie de mettre quelque chose dans $_SESSION['username'], et dès qu'il y a quelque chose, tu le vires.

pour le reste, mettre des echo un peu partout pour voir ce qu'il se passe, arreter les mysql_real_escape_string and co quand il n'y en a pas besoin.
 
Nouveau WRInaute
Enfaite, cette page me sert de déconnexion et de connexion, quand je me connecte elle est lancée, la session est crée et quand je me déconnecte elle est relancée et elle supprime les variables de sessions. Ce n'est pas si drôle que ça après tout :p
 
Discussions similaires
Haut