Crypter deux mots de passe
- Accueil
- Forum
- Programmation
- PHP
- Crypter deux mots de passe
zoria Le 3 mai 2016 à 15:39 (Édité le 25 janvier 2019 à 17:51)
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 Le 3 mai 2016 à 16:22 (Édité le 1 janvier 1970 à 01:00)
guewen Le 3 mai 2016 à 17:48 (Édité le 1 janvier 1970 à 01:00)
zoria Le 3 mai 2016 à 17:55 (Édité le 3 mai 2016 à 17:57)
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 Le 3 mai 2016 à 20:44 (Édité le 1 janvier 1970 à 01:00)
<?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 Le 3 mai 2016 à 21:15 (Édité le 1 janvier 1970 à 01:00)
Florian Le 3 mai 2016 à 21:22 (Édité le 3 mai 2016 à 21:29)
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 Le 4 mai 2016 à 10:33 (Édité le 1 janvier 1970 à 01:00)
Merci à tous pour votre aide ça fonctionne à merveille !