⊗ppPmAuHFP 426 of 447 menu

password_hash-funktio

Itse asiassa funktio md5 ja salasanan suolaaminen sen avulla on vanhentunutta. Opimme sen, jotta ymmärtäisit jatkomateriaalia, ja myös koska saatat kohdata sitä työskennellessäsi muiden projektien parissa.

On olemassa kehittyneempi tapa saada suolattu salasana. Tätä varten käytetään funktiota password_hash. Se ottaa ensimmäisenä parametrina merkkijonon ja toisena - salausalgoritmin (siitä myöhemmin), ja palauttaa tämän merkkijonon hash-arvon yhdessä suolan kanssa.

Kokeile ajaa tämä koodi useita kertoja:

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

Saat joka kerta erilaisen tuloksen, ja tässä tuloksessa merkkijonon ensimmäinen osa on suola ja toinen osa - suolattu salasana.

Oletetaan, että meillä on hash-arvo, joka on saatu funktiosta password_hash ja jokin salasana. Jotta voidaan tarkistaa, onko tämä tämän salasanan hash vai ei, tulee käyttää funktiota password_verify - se ottaa ensimmäisenä parametrina salasanan, ja toisena - hash-arvon, ja palauttaa true tai false.

Katsotaanpa esimerkkiä:

<?php $password = '12345'; // salasana $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // hash tästä salasanasta } else { // hash ei ole tästä salasanasta } ?>

Mitä tämä meille käytännössä antaa: meidän ei tarvitse luoda tietokantaan erillistä kenttää suolan tallentamiseen, eikä tarvitse vaivautua suolan generoimiseen - PHP hoitaa kaiken puolestamme!

Eli käy niin, että tietokannassa kentässä password tallennamme suolatun salasanan yhdessä sen suolan kanssa. Samalla hash-pohjainen salasana on pidempi. Siksi tietokannassa meidän on korjattava salasanakentän koko ja asetettava se 60 merkkiin.

Korjataan nyt rekisteröintikoodi. Tässä on mitä on nyt:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // suolan pituus for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // merkki ASCII-taulukosta } return $salt; } $salt = generateSalt(); // suola $password = md5($salt . $_POST['password']); // muunnetaan salasana suolatuksi hashiksi ?>

password_hash:n avulla voimme lyhentää tämän muotoon:

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

Samalla tavalla korjataan kirjautumiskoodi:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // haetaan käyttäjä tunnuksen perusteella $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // suolattu salasana tietokannasta // Tarkistetaan tietokannan hash-arvon vastaavuus annettuun salasanaan if (password_verify($_POST['password'], $hash)) { // kaikki kunnossa, kirjaudutaan... } else { // salasana ei täsmää, näytetään viesti } } else { // käyttäjää tällä tunnuksella ei ole, näytetään viesti } ?>

Muokkaa kirjautumisesi ja rekisteröintisi uusien opittujen funktioiden mukaisiksi.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää