⊗ppPmAuHFP 426 of 447 menu

Fonction password_hash

En réalité, la fonction md5 et le salage du mot de passe avec celle-ci sont considérés comme obsolètes. Nous l'avons étudiée pour que vous compreniez la suite du matériel, et aussi parce que vous pourriez y être confronté en travaillant sur des projets externes.

Il existe une manière plus perfectionnée d'obtenir un mot de passe salé. Pour cela, on utilise la fonction password_hash. Son premier paramètre est une chaîne de caractères, et le second - l'algorithme de chiffrement (voir plus tard), et elle retourne le hachage de cette chaîne avec le sel.

Essayez d'exécuter ce code plusieurs fois :

<?php echo password_hash('12345', PASSWORD_DEFAULT); ?>

Vous obtiendrez un résultat différent à chaque fois et dans ce résultat, la première partie de la chaîne sera le sel, et la seconde partie - le mot de passe salé.

Supposons que nous ayons un hachage obtenu de la fonction password_hash et un certain mot de passe. Pour vérifier s'il s'agit du hachage de ce mot de passe ou non, il faut utiliser la fonction password_verify - son premier paramètre est le mot de passe, et le second - le hachage, et elle retourne true ou false.

Regardons un exemple :

<?php $password = '12345'; // mot de passe $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hachage if (password_verify($password, $hash)) { // le hachage provient de ce mot de passe } else { // le hachage ne provient pas de ce mot de passe } ?>

Qu'est-ce que cela nous apporte en pratique : nous pouvons ne pas créer de champ séparé dans la base de données pour stocker le sel, ne pas nous embêter à générer ce sel - PHP fera tout pour nous !

Il en résultera que dans la base de données, dans le champ password, nous stockerons le mot de passe salé avec son sel. De plus, le mot de passe haché aura une longueur plus importante. C'est pourquoi dans la base de données, nous devons corriger la taille du champ du mot de passe et la définir à 60 caractères.

Maintenant, corrigeons le code d'inscription. Voici ce que nous avons actuellement :

<?php function generateSalt() { $salt = ''; $saltLength = 8; // longueur du sel for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // caractère de la table ASCII } return $salt; } $salt = generateSalt(); // sel $password = md5($salt . $_POST['password']); // transforme le mot de passe en hachage salé ?>

Avec password_hash, nous réduisons cela à :

<?php $password = password_hash($_POST['password'], PASSWORD_DEFAULT); ?>

Le code d'authentification sera modifié de manière similaire :

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // obtient l'utilisateur par son login $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // mot de passe salé de la BDD // Vérifie la correspondance entre le hachage de la base et le mot de passe saisi if (password_verify($_POST['password'], $hash)) { // tout est bon, on authentifie... } else { // le mot de passe ne correspond pas, on affiche un message } } else { // l'utilisateur avec ce login n'existe pas, on affiche un message } ?>

Modifiez votre authentification et votre inscription pour utiliser les nouvelles fonctions étudiées.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser