⊗ppPmAuHFP 426 of 447 menu

Funkcia password_hash

V skutočnosti sa funkcia md5 a solenie hesla s jej pomocou považuje za zastarané. Študovali sme ju, aby ste pochopili ďalšiu materiál, a tiež preto, že sa s tým môžete stretnúť pri práci na cudzích projektoch.

Existuje dokonalejší spôsob, ako získať solené heslo. Na to sa používa funkcia password_hash. Prvým parametrom prijíma reťazec a druhým - šifrovací algoritmus (o neskôr) a vráti hash tohto reťazca spolu so soľou.

Skúste niekoľkokrát spustiť tento kód:

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

Zakaždým dostanete iný výsledok a v tomto výsledku bude prvá časť reťazca predstavovať soľ, a druhá časť - solené heslo.

Predpokladajme, že máme hash získaný z funkcie password_hash a nejaké heslo. Aby sme skontrolovali, či je to hash tohto hesla alebo nie, mali by sme použiť funkciu password_verify - prvým parametrom prijíma heslo, a druhým - hash, a vráti true alebo false.

Pozrime sa na príklad:

<?php $password = '12345'; // heslo $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // hash od tohto hesla } else { // hash nie je od tohto hesla } ?>

Čo nám to dáva v praxi: môžeme v databáze nevytvárať samostatné pole pre ukladanie soli, nezaoberať sa generovaním tejto soli - PHP všetko spraví za nás!

To znamená, že v databáze v poli password budeme ukladať solené heslo spolu s jeho soľou. Pritom hashované heslo bude mať väčšiu dĺžku. Preto v databáze potrebujeme opraviť veľkosť poľa pre heslo a nastaviť ju na 60 znakov.

Teraz opravme kód registrácie. Tu je to, čo máme teraz:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // dĺžka soli for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // znak z ASCII tabuľky } return $salt; } $salt = generateSalt(); // soľ $password = md5($salt . $_POST['password']); // premeníme heslo na solený hash ?>

Pomocou password_hash to zredukujeme na:

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

Podobným spôsobom sa upraví kód autorizácie:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // získame používateľa podľa loginu $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // solené heslo z databázy // Kontrolujeme zhodu hashu z databázy so zadaným heslom if (password_verify($_POST['password'], $hash)) { // všetko v poriadku, autorizujeme... } else { // heslo nesedí, vypíšeme správu } } else { // používateľ s takýmto loginom neexistuje, vypíšeme správu } ?>

Upravte vašu autorizáciu a registráciu na novo naučené funkcie.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť