⊗ppPmAuHFP 426 of 447 menu

password_hash ֆունկցիա

Իրականում md5 ֆունկցիան և դրա միջոցով գաղտնաբառի աղը դնելը համարվում է հնացած։ Մենք ուսումնասիրեցինք այն, որպեսզի հասկանաք հետագա նյութը, ինչպես նաև այն պատճառով, որ կարող եք հանդիպել դրան աշխատելով այլ մարդկանց նախագծերի հետ։

Գոյություն ունի գաղտնաբառի աղացվածքը ստանալու ավելի կատարյալ եղանակ։ Դրա համար օգտագործվում է password_hash ֆունկցիան։ Այն առաջին պարամետրով ընդունում է տող, իսկ երկրորդ պարամետրով՝ գաղտնագրման ալգորիթմը (դրա մասին ավելի ուշ), և վերադարձնում է այդ տողի հեշը աղի հետ միասին։

Փորձեք մի քանի անգամ գործարկել այս կոդը։

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

Դուք ամեն անգամ կստանաք տարբեր արդյունք, և այդ արդյունքի մեջ տողի առաջին մասը կլինի աղը, իսկ երկրորդ մասը՝ աղով գաղտնաբառը։

Ենթադրենք, մենք ունենք password_hash ֆունկցիայից ստացված հեշ և ինչ-որ գաղտնաբառ։ Ստուգելու համար, թե արդյոք սա այդ գաղտնաբառի հեշն է, թե ոչ, պետք է օգտագործել password_verify ֆունկցիան։ Այն առաջին պարամետրով ընդունում է գաղտնաբառը, իսկ երկրորդ պարամետրով՝ հեշը, և վերադարձնում է true կամ false։

Դիտարկենք օրինակով։

<?php $password = '12345'; // գաղտնաբառ $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // հեշ if (password_verify($password, $hash)) { // հեշը այս գաղտնաբառից է } else { // հեշը այս գաղտնաբառից չէ } ?>

Ինչ է սա տալիս մեզ գործնականում․ մենք կարող ենք չստեղծել տվյալների բազայում առանձին դաշտ աղը պահելու համար, չանհանգստանալ այդ աղի գեներացիայի մասին, PHP-ն ամեն ինչ կանի մեզ համար։

Այսինքն կստացվի, որ տվյալների բազայում password դաշտում մենք կպահենք աղով գաղտնաբառը նրա աղի հետ միասին։ Այդ դեպքում հեշավորված գաղտնաբառը կունենա մեծ երկարություն։ Ուստի տվյալների բազայում մենք պետք է ուղղենք գաղտնաբառի դաշտի չափը և սահմանենք այն 60 նիշ։

Հիմա ուղղենք գրանցման կոդը։ Ահա թե ինչ ունենք այժմ։

<?php function generateSalt() { $salt = ''; $saltLength = 8; // աղի երկարությունը for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // նիշ ASCII-աղյուսակից } return $salt; } $salt = generateSalt(); // աղ $password = md5($salt . $_POST['password']); // գաղտնաբառը վերածում ենք աղով հեշի ?>

password_hash-ի միջոցով մենք դա կկրճատենք մինչև.

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

Նմանապես կուղղվի նաև տեղի ունեցողի կոդը։

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // ստանում ենք օգտատիրոջը լոգինով $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // աղով գաղտնաբառը ՏԲ-ից // Ստուգում ենք բազայի հեշի և մուտքագրված գաղտնաբառի համապատասխանությունը if (password_verify($_POST['password'], $hash)) { // ամեն ինչ կարգին է, տեղի ունեցող... } else { // գաղտնաբառը չի համապատասխանում, ցույց կտանք հաղորդագրություն } } else { // նման լոգինով օգտատեր չկա, ցույց կտանք հաղորդագրություն } ?>

Վերափոխեք ձեր տեղի ունեցողը և գրանցումը նոր ուսումնասիրված ֆունկցիաների վրա։

Հայերեն
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել