⊗ppPmAuHFP 426 of 447 menu

Funktionen password_hash

Faktisk anses funktionen md5 og salting af adgangskoder med dens hjælp for at være forældet. Vi studerede den, så du ville forstå det efterfølgende materiale, og også fordi du kan støde på dette, når du arbejder med andre folks projekter.

Der findes en mere avanceret måde at opnå en saltet adgangskode på. Til dette bruges funktionen password_hash. Den tager en streng som første parameter og en krypteringsalgoritme som anden parameter (mere om det senere), og returnerer et hash af strengen sammen med salt.

Prøv at køre denne kode et par gange:

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

Du vil hver gang få et andet resultat, og i dette resultat vil den første del af strengen være saltet, og den anden del - den saltede adgangskode.

Lad os sige, at vi har et hash, der er opnået fra funktionen password_hash og en eller anden adgangskode. For at tjekke om dette er hash'et for denne adgangskode eller ej, skal man bruge funktionen password_verify - den tager adgangskoden som første parameter, og hash'et som anden parameter, og returnerer true eller false.

Lad os se på et eksempel:

<?php $password = '12345'; // adgangskode $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // hash fra denne adgangskode } else { // hash ikke fra denne adgangskode } ?>

Hvad giver det os i praksis: vi behøver ikke at oprette et separat felt i databasen for at gemme salt, ikke at bekymre os om at generere dette salt - PHP klarer alt for os!

Det vil sige, at det vil resultere i, at vi i databasen i feltet password vil gemme den saltede adgangskode sammen med dens salt. Samtidig vil den hashede adgangskode have en større længde. Derfor skal vi i databasen rette størrelsen på adgangskodefeltet og sætte den til 60 tegn.

Lad os nu rette registreringskoden. Her er hvad vi har nu:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // saltlængde for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // tegn fra ASCII-tabellen } return $salt; } $salt = generateSalt(); // salt $password = md5($salt . $_POST['password']); // omdanner adgangskoden til et saltet hash ?>

Med hjælp fra password_hash kan vi reducere dette til:

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

På samme måde justeres login-koden:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // henter brugeren via login $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // saltet adgangskode fra DB // Tjekker om hash'et fra databasen matcher den indtastede adgangskode if (password_verify($_POST['password'], $hash)) { // alt OK, logger ind... } else { // adgangskoden matchede ikke, vis besked } } else { // der er ingen bruger med dette login, vis besked } ?>

Omkonverter din login og registrering til de nye studerede funktioner.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis