⊗ppPmAuHFP 426 of 447 menu

Functie password_hash

In feite worden de functie md5 en het zouten van een wachtwoord ermee als verouderd beschouwd. We hebben het bestudeerd zodat je het verdere materiaal begrijpt, en ook omdat je het kunt tegenkomen bij het werken met projecten van anderen.

Er bestaat een meer geavanceerde manier om een gezouten wachtwoord te verkrijgen. Hiervoor wordt de functie password_hash gebruikt. Als eerste parameter accepteert ze een string, en als tweede - het versleutelingsalgoritme (hierover later), en retourneert ze de hash van deze string samen met het zout.

Probeer deze code een paar keer uit te voeren:

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

Je zult elke keer een ander resultaat krijgen en in dit resultaat zal het eerste deel van de string het zout zijn, en het tweede deel - het gezouten wachtwoord.

Stel we hebben een hash, verkregen van de functie password_hash en een wachtwoord. Om te controleren of dit de hash van dit wachtwoord is of niet, moet je de functie password_verify gebruiken - als eerste parameter accepteert ze het wachtwoord, en als tweede - de hash, en retourneert ze true of false.

Laten we naar een voorbeeld kijken:

<?php $password = '12345'; // wachtwoord $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // hash van dit wachtwoord } else { // hash niet van dit wachtwoord } ?>

Wat levert ons dit op in de praktijk: we hoeven geen apart veld in de database aan te maken voor het opslaan van het zout, ons niet druk te maken over het genereren van dit zout - PHP doet alles voor ons!

Dat betekent dat we in de database in het veld password het gezouten wachtwoord samen met zijn zout zullen opslaan. Hierbij zal de gehashte wachtwoord een grotere lengte hebben. Daarom moeten we in de database de grootte van het wachtwoordveld aanpassen en instellen op 60 tekens.

Laten we nu de registratiecode aanpassen. Dit is wat we nu hebben:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // lengte van het zout for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // teken uit ASCII-tabel } return $salt; } $salt = generateSalt(); // zout $password = md5($salt . $_POST['password']); // transformeer wachtwoord naar gezouten hash ?>

Met password_hash kunnen we dit terugbrengen tot:

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

Op eenzelfde manier wordt de autorisatiecode aangepast:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // verkrijg gebruiker op basis van login $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // gezouten wachtwoord uit de database // Controleer de overeenkomst van de hash uit de database met het ingevoerde wachtwoord if (password_verify($_POST['password'], $hash)) { // alles ok, autoriseer... } else { // wachtwoord kwam niet overeen, toon bericht } } else { // er is geen gebruiker met deze login, toon bericht } ?>

Verbeter je autorisatie en registratie met de nieuwe bestudeerde functies.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren