[Résolu] Mot de passe et Mysql

WRInaute occasionnel
Je suis en train de creer un espace membre ,mais je rame avec les mots de passes !

J'ai un formulaire d'inscription qui entre les donnée dans la base ,mais le mot de passe est crypté dans la base de donée , du coup quand je fait une verification comme cela :

Code:
    if ($mot_de_passe == $data['mot_de_passe']) {
      $loginOK == true;

$mot_de_passe ce qui a été saisi dans le formulaire d'identification
$data['mot_de_passe'] le pass contenu dans la base

Le problème est que $data['mot_de_passe'] est crypté et $mot_de_passe en clair , du coup on ne peut pas s'identifier ! :cry:


Merci

Ronan
 
WRInaute occasionnel
Je ne sait pas comment il est crypté ! comment le savoir ? c'est fait de manière automatique :roll:
 
WRInaute discret
Faut regarder dans ton formulaire qui ajoute les membres dans la base de données...car il existe plusieurs types de 'cryptage' de données.

C'est p-e aussi un cryptage 'maison' fait par une fonction de ton code...
 
WRInaute impliqué
Si y a 32 caractère, c'est certainement un md5.

Sinon, si y en a 40 c'est certainement un sha1.

Te suffit de compter le nombre de caractère ;)
 
WRInaute occasionnel
Je rentre les données ainsi :

$rq = "INSERT INTO utilisateurs (nom_utilisateur, prenom, nom, email,
mot_de_passe, date_enreg) VALUES ('$u', '$p', '$n', '$e',
PASSWORD('$mp'), NOW())";
 
WRInaute passionné
Ron56 a dit:
Je rentre les données ainsi :

$rq = "INSERT INTO utilisateurs (nom_utilisateur, prenom, nom, email,
mot_de_passe, date_enreg) VALUES ('$u', '$p', '$n', '$e',
PASSWORD('$mp'), NOW())";

Note : La fonction PASSWORD() est utilisée durant l'identification au serveur MYSQL. Il est recommandé de ne pas l'utiliser pour vos applications. Utilisez plutôt MD5() ou SHA1(). Voyez aussi RFC-2195 pour plus d'informations sur comment gérer les mots de passe et l'identification de votre système.

et avec un lien vers la source :
http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html
 
WRInaute impliqué
Ah bah c'est le chiffrement mysql.

T'as qu'a faire une requête PHP :

Code:
SELECT PASSWORD(motdepassedonttuveuxlecryptage)
 
WRInaute occasionnel
Pas compris comment l'utiliser , voila mon code :

Code:
// On va chercher le mot de passe afférent à ce login
  $sql = "SELECT id_utilisateur, nom_utilisateur, prenom, nom, email, date_enreg, mot_de_passe FROM utilisateurs WHERE nom_utilisateur = '".addslashes($nom_utilisateur)."'";
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);

       
    // On vérifie que son mot de passe est correct
    if ($mot_de_passe == $data['mot_de_passe']) {
      $loginOK == true;
      echo 'mot de passe correct!';
 
WRInaute impliqué
Code:
// On va chercher le mot de passe afférent à ce login
  $sql = "SELECT PASSWORD('".$mot_de_passe."') AS pass, id_utilisateur, nom_utilisateur, prenom, nom, email, date_enreg, mot_de_passe FROM utilisateurs WHERE nom_utilisateur = '".addslashes($nom_utilisateur)."'";
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);

       
    // On vérifie que son mot de passe est correct
    if ($data['pass'] == $data['mot_de_passe']) {
      $loginOK == true;
      echo 'mot de passe correct!';

Par exemple ;)
 
WRInaute passionné
Ron56 a dit:
// On vérifie que son mot de passe est correct
if ($mot_de_passe == $data['mot_de_passe']) {
$loginOK == true;
echo 'mot de passe correct!';
[/code]

1. Dans ton INSERT tu remplace PASSWORD par SHA1()
2. Tu remplace ton code php par
Code:
    // On vérifie que son mot de passe est correct
    if (sha1($mot_de_passe) == $data['mot_de_passe']) {
      $loginOK == true;
      echo 'mot de passe correct!';
 
WRInaute occasionnel
Ca marche pas , ca fait depuis 15h que j'essaye :oops:

Si je met les pass en clair c'est riqué ?
 
WRInaute occasionnel
Si y en a qui s'ennui :lol: :

Mon code :

Code:
<?php
// On démarre la session
session_start();
$loginOK = false;  // cf Astuce

//On se connecte via le fichier externe 

include('../fonctions/sql_connect.php');

// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['nom_utilisateur'])) && (!empty($_POST['mot_de_passe'])) ) {

  extract($_POST);  // je vous renvoie à la doc de cette fonction


// On va chercher le mot de passe afférent à ce login
  $sql = "SELECT id_utilisateur, nom_utilisateur, prenom, nom, email, date_enreg, mot_de_passe FROM utilisateurs WHERE nom_utilisateur = '".addslashes($nom_utilisateur)."'";
  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);

         
    // On vérifie que son mot de passe est correct
    if (sha1($mot_de_passe) == $data['mot_de_passe']) {
      $loginOK == true;
      echo 'mot de passe correct!'; 
    }
  }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['id_utilisateur'] = $data['id_utilisateur'];
  $_SESSION['nom_utilisateur'] = $data['nom_utilisateur'];
  $_SESSION['prenom'] = $data['prenom'];
  $_SESSION['nom'] = $data['nom'];
  $_SESSION['email'] = $data['email'];
  $_SESSION['date_enreg'] = $data['date_enreg'];
}
else {
  echo 'Une erreur est survenue, veuillez réessayer !';
}
?>


Et le formulaire :

Code:
<form method="post" action="verifLogin.php">
   <table border="0" width="400" align="center">
    <tr>
     <td width="200"><b>Vôtre nom d'utilisateur</b></td>
     <td width="200">
      <input type="text" name="nom_utilisateur">
     </td>
    </tr>
    <tr>
     <td width="200"><b>Vôtre mot de passe<b></td>
     <td width="200">
      <input type="password" name="mot_de_passe">
     </td>
    </tr>
    <tr>
     <td colspan="2">
      <input type="submit" name="submit" value="login">
     </td>
    </tr>
   </table>
  </form>
 
WRInaute occasionnel
Voila le script d'enregistrement !

Code:
<?php # Listing 5.10 - enregistrer-2.php

// Définir le titre de la page 
$titre_page = "Enregistrement";


if (isset($_POST['submit']))
{ // Traiter le formulaire

  // Créer une fonction pour échapper les données.
  function echappement ($data)
  { global $bd;                  // connexion nécessaire
    if (ini_get('magic_quotes_gpc')) 
    { $data = stripslashes($data);
    }
    return mysql_escape_string($data);
  } // fin de la fonction

  include('../fonctions/sql_connect.php');
  $message = NULL;                            // créer une variable vide

  // Vérifier la présence d'un prénom
  if (empty($_POST['prenom']))
  { $p = FALSE;
    $message .= '<p>Vous avez oublié d\'indiquer votre prénom</p>';
  }
  else
  { $p = echappement($_POST['prenom']);
  }

  // Vérifier la présence d'un nom
  if (empty($_POST['nom']))
  { $n = FALSE;
    $message .= '<p>Vous avez oublié d\'indiquer votre nom</p>';
 }
  else
  { $n = echappement($_POST['nom']);
  }

  // Vérifier l'existence d'une adresse e-mail
  if (empty($_POST['email']))
  { $e = FALSE;
    $message .= '<p>Vous avez oublié d\'indiquer votre adresse e-mail</p>';
  }
  else
  { $e = echappement($_POST['email']);
  }

  // Vérifier la présence d'un nom d'utilisateur
  if (empty($_POST['nom_utilisateur']))
  { $u = FALSE;
    $message .= '<p>Vous avez oublié d\'indiquer votre nom d\'utilisateur</p>';
  }
  else
  { $u = echappement($_POST['nom_utilisateur']);
  }

  // Vérifier l'existence et l'exactitude du mot de passe
  if (empty($_POST['mot_de_passe1']))
  { $mp = FALSE;
    $message .= '<p>Vous avez oublié d\'indiquer votre mot de passe</p>';
  }
  else
   { if ($_POST['mot_de_passe1'] == $_POST['mot_de_passe2'])
     { $mp = echappement($_POST['mot_de_passe1']);
     }
     else
     { $mp = FALSE;
       $message .= '<p>Votre mot de passe est différent de celui que vous avez précédemment déclaré</p>';
     }
  }

  if ($p && $n && $e && $u && $mp)                // Si tout est correct
  { // Voir si l'utilisateur existe déjà
$ver=mysql_query("SELECT id_utilisateur FROM utilisateurs where nom_utilisateur='$u'");
$verif=mysql_num_rows($ver);
if($verif=='0')
      { // créer une nouvelle requête
      $rq = "INSERT INTO utilisateurs (nom_utilisateur, prenom, nom, email,
            mot_de_passe, date_enreg) VALUES ('$u', '$p', '$n', '$e',
            SHA1('$mp'), NOW())";
      // lancer la requête d'enregistrement
      $result = mysql_query($rq);
      if ($result)                      // Si l'enregistrement est correct
      { // Envoyer éventuellement un e-mail
        echo "<p><b>Merci de vous être enregistré sur notre site.</b></p>";
        exit();                             // terminer le script
      }
      else
      { echo "<p>Vous n'avez pas pu être enregistré à cause d'une erreur système".
             "<p></p>" . mysql_error() . "<p></p>";
      }
    }
    else
    { $message .= "<p>Nom d'utilisateur déjà utilisé</p>";  
    }
    mysql_close();           // refermer la connexion avec la base de données
  }
  else
  { // Quelque chose n'est pas correct
    $message .= "<p>Veuillez avoir l'obligeance de recommencer</p>";
  }
}

// Afficher éventuellement un ou plusieurs messages d'erreur
if (isset($message))
{ echo "<font color='red'>$message</font>";
}
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<fieldset>
<legend>Veuillez renseigner le formulaire ci-dessous :</legend>

<p><b>Prénom :</b>
<input type="text" name="prenom" size="15" maxlength="15" 
       value="<?php if (isset($_POST['prenom'])) echo $_POST['prenom']; ?>"/>
</p>

<p><b>Nom :</b>
<input type="text" name="nom" size="30" maxlength="30"
       value="<?php if (isset($_POST['nom'])) echo $_POST['nom']; ?>"/>
</p>

<p><b>Adresse e-mail :</b>
<input type="text" name="email" size="40" maxlength="40" 
       value="<?php if (isset($_POST['email'])) echo $_POST['email']; ?>"/>
</p>

<p><b>Nom d'utilisateur :</b>
<input type="text" name="nom_utilisateur" size="10" maxlength="20"
       value="<?php if (isset($_POST['nom_utilisateur'])) 
              echo $_POST['nom_utilisateur']; ?>"/>
</p>

<p><b>Mot de passe :</b>
<input type="password" name="mot_de_passe1" size="20" maxlength="20" />
</p>

<p><b>Confirmez votre mot de passe :</b> 
<input type="password" name="mot_de_passe2" size="20" maxlength="20" />
</p>
</fieldset>

<div align="center">
<input type="submit" name="submit" value="Envoyer les informations" />
</div>

</form><!-- Fin du formulaire -->

<?php
// Fin de l'instruction conditionnelle principale

?>
 
WRInaute passionné
Essaye SHA1($mp) à la place de SHA1('$mp')

PHP
<? echo( sha1("tutu") ?>
=> 32a89bdcec2d50f9dc9747cd47ecfc14cf9c3dbe

mySQL
SELECT SHA1("tutu");
=> 32a89bdcec2d50f9dc9747cd47ecfc14cf9c3dbe

la comparaison entre les 2 chaines doit marcher
 
WRInaute occasionnel
spidetra a dit:
c'est quoi la taille de ton champ mot_de_passe ?


C'était ca qui buggait :oops: , je l'ai mis a 100 , je suis trankil ! :wink:

Mais le petit bug doit forcement venir ce cet portion de code :

Code:
// Si le login a été validé on met les données en sessions
if ($loginOK) {
  $_SESSION['id_utilisateur'] = $data['id_utilisateur'];
  $_SESSION['nom_utilisateur'] = $data['nom_utilisateur'];
  $_SESSION['prenom'] = $data['prenom'];
  $_SESSION['nom'] = $data['nom'];
  $_SESSION['email'] = $data['email'];
  $_SESSION['date_enreg'] = $data['date_enreg'];
}
else {
  echo 'Une erreur est survenue, veuillez réessayer !';
 
WRInaute passionné
C'est pas un simple = qu'il faut là ?
Code:
// On vérifie que son mot de passe est correct
    if ($mot_de_passe == $data['mot_de_passe']) {
      $loginOK == true;
      echo 'mot de passe correct!';

$loginOK = true ? C'est pas ça le pb ?
 
WRInaute occasionnel
spidetra a dit:
C'est pas un simple = qu'il faut là ?
Code:
// On vérifie que son mot de passe est correct
    if ($mot_de_passe == $data['mot_de_passe']) {
      $loginOK == true;
      echo 'mot de passe correct!';

$loginOK = true ? C'est pas ça le pb ?

je pense pas je vais essayer :wink:
 
WRInaute occasionnel
Au tout départ on défini login false , si le mot de passe est bon on définit login true et apres si login est true on creer la session :wink:
 
WRInaute passionné
ça fait longtemp que je ne fait plus de php mais :

== => comparaison
= => affectation

J'ai tout faut là ?
j'écrirais $loginOK = true ;
 
WRInaute occasionnel
Code:
      $loginOK = true;
      echo 'mot de passe correct!'; 
    }
  }
}

// Si le login a été validé on met les données en sessions
if ($loginOK = true) {

Ca marche
 
Discussions similaires
Haut