⊗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हिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართული한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау