Crypter deux mots de passe

Suivre ce topic
Ce topic est suivi par : Personne...
Ce topic a été résolu
zoria

zoria Le 3 mai 2016 à 15:39 (Édité le 25 janvier 2019 à 17:51)

Salut à tous,

Alors voilà je débute en PHP et j'aimerais changer la méthode de cryptage des mdp en utilisant la fonction password_hash(). Le hash doit être le même pour password et password2.

Mon formulaire d'inscription comporte deux champs (password 1 et password2) qui sont cryptés comme ceci dans le tutoriel de primfx:

<?php
$password = sha1($_POST['password']);
$password2 = sha1($_POST['password2']);
Ce que je cherche à faire:

$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$password2 = password_hash($_POST['password2'], PASSWORD_DEFAULT);

Est-il possible de faire quelque chose dans ce genre ?

$password = password_hash($_POST['password', 'password2'], PASSWORD_DEFAULT);
// ou bien
$password = password_hash($_POST['password'], $_POST['password2'], PASSWORD_DFAULT);
Merci d'avance pour ceux qui prendront le temps d'aider un novice.

Zoria
Clouder

Clouder Le 3 mai 2016 à 16:22

Tu aurais utilisé la fonction crypt de php (Très sécurisé avec la possibilité de faire ta propre clé de cryptage pour les mots de passe) j'aurais pu d'expliqué comment faire mais je n'utilise pas la fonction Hash.
guewen

guewen Le 3 mai 2016 à 17:48

Et ces valeurs, tu veux les mettre comment dans la bdd ? Séparés ou dans la même ligne car dans ce cas là, je ne vois aucun intérêt à ce que tu veux faire 😉 Vaut mieux garder deux variables différentes 😉
zoria

zoria Le 3 mai 2016 à 17:55 (Édité le 3 mai 2016 à 17:57)

Merci pour vos réponses. ;)

Et ces valeurs, tu veux les mettre comment dans la bdd ? Séparés ou dans la même ligne car dans ce cas là, je ne vois aucun intérêt à ce que tu veux faire 😉 Vaut mieux garder deux variables différentes 😉


Le problème c'est que si je garde deux variables différentes vu que je compare si mon password est identique à password2 cela ne fonctionne pas car le résultat du cryptage est différent.

Un peu plus bas je fais un check justement:

<?php
   if(password == password2)
   {
      // c'est la dernière vérif après j'insère dans la bdd
   }
   else
   {
      // les deux mdp ne correspondent pas (ce qui est mon cas vu que le résultat du cryptage diffère)
   }
?>
La solution la plus simple serait de supprimer cette vérification et de ne garder qu'une seule variable password mais bon, j'aimerais bien quand même que l'utilisateur confirme le mot de passe.
guewen

guewen Le 3 mai 2016 à 20:44

Alors, je te l'accorde, c'est le même résultat au final mais pourquoi ne pas faire 
<?php   if($_POST['password'] == $_POST['password2'])
   {
      // Tu mets ton code ici genre les variables que tu cryptes : 
      $password = sha1($_POST['password']);
      $password2 = sha1($_POST['password2']);

      // Blabla, blabla 
   }
   else
   {
      // les deux mdp ne correspondent pas (ce qui est mon cas vu que le résultat du cryptage diffère)
   }
?>

Mais ne te compliques pas la vie si tu as fais comme sa. C'est pareil 😉
Florian

Florian Le 3 mai 2016 à 21:15

Tu check en clair si c'est les mêmes puis tu crypt pourquoi les crypter avant ? surtout que avec Password hash tu auras jamais les mêmes mot de passe x)
Florian

Florian Le 3 mai 2016 à 21:22 (Édité le 3 mai 2016 à 21:29)

Allez je suis sympa !!



if(isconnect() == false){
if(isset($_POST['forminscription'])) {
   $pseudo = htmlspecialchars($_POST['pseudo']);
   $mail = htmlspecialchars($_POST['mail']);
   $mail2 = htmlspecialchars($_POST['mail2']);
   if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mail2']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2'])) {
      if(preg_match('`^([a-zA-Z0-9-_]{3,32})Allez je suis sympa !!



', $_POST['pseudo'])){
      $pseudolength = strlen($pseudo);
      if($pseudolength <= 32) {
         if($mail == $mail2) {
            if(filter_var($mail, FILTER_VALIDATE_EMAIL)) {
               $reqmail = $bdd->prepare("SELECT * FROM membres WHERE mail = ?");
               $reqmail->execute(array($mail));
               $mailexist = $reqmail->rowCount();
               if($mailexist == 0) {
                  if($_POST['mdp'] == $_POST['mdp2']) {
                     $password = password_hash($_POST['mdp'],PASSWORD_BCRYPT,['cost' => 12]);
                     $insertmbr = $bdd->prepare("INSERT INTO membres(users, password, mail, key_confirmed, ip_creation) VALUES(?, ?, ?, ?, ?)");
                     $insertmbr->execute(array($pseudo, $password, $mail, $key, get_ip()));
                     setFlash('Inscription réussite, un mail vous a étais envoyer pour la confirmation du compte', 'success');
                     $contenu = 'Bonjour '.$pseudo.'! <br />'; 
                     $contenu .= 'Confirmation du compte ...<br />'; 
                     $contenu .= 'Pour confirmer votre compte veuillez cliquer sur <a href="google.com?pseudo='.$pseudo.'&token='.$key.'">ce lien</a><br />'; 
                     $contenu .= 'Si le lien ne s\'affiche pas veuillez copier coller le lien dans votre navigateur google.com?pseudo='.$pseudo.'&token='.$key.'<br />';
                    $from = "From: Confirmation du compte de $pseudo <contact@google.com>\nMime-Version:"; 
                    $from .= " 1.0\nContent-Type: text/html; charset=ISO-8859-1\n"; 
                    mail($mail,$titre,$contenu,$from); 
                  } else {
                     $erreur = "Vos mots de passes ne correspondent pas !";
                  }
               } else {
                  $erreur = "Adresse mail déjà utilisée !";
               }
            } else {
               $erreur = "Votre adresse mail n'est pas valide !";
            }
         } else {
            $erreur = "Vos adresses mail ne correspondent pas !";
         }
      } else {
         $erreur = "Votre pseudo ne doit pas dépasser 32 caractères !";
      }
   }else{
      $erreur = "Pseudo invalide";
   }
} else {
      $erreur = "Tous les champs doivent être complétés !";
   }
}
La connexion

if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password'])){
   $pseudo = htmlspecialchars($_POST['username']);
               $requser = $bdd->prepare("SELECT * FROM membres WHERE mail = :username or users = :username");
               $requser->execute(array(":username" => $pseudo));
               $user = $requser->fetch();
    if(password_verify($_POST['password'], $user['password'])){
              updateLoginsLogs($user);
               $_SESSION['username'] = $user['users'];
              $_SESSION['mail'] = $user['mail'];
              $_SESSION['id'] = $user['id'];
              $_SESSION['grade'] = $user['grade'];
              $_SESSION['compteconfirmed'] = $user['confirmed'];
              $_SESSION['token_crsf'] = random(30);
      setFlash('Connexion réussie !', 'success');
      header('Location: ./');
}else{
   $erreur = "Mauvais mot de passe";
}
}
PS pour le Cout ( COST) regarde sur google y'a un script qui permet de trouver le bon 😀
zoria

zoria Le 4 mai 2016 à 10:33

Salut !

Merci à tous pour votre aide ça fonctionne à merveille !

Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte