⊗ppPmAuHFP 426 of 447 menu

Fungsi password_hash

Sebenarnya fungsi md5 dan penggaraman password dengan menggunakannya dianggap usang. Kami mempelajarinya agar Anda memahami materi selanjutnya, dan juga karena Anda mungkin menemukannya saat bekerja dengan proyek orang lain.

Ada cara yang lebih canggih untuk mendapatkan password yang digaram. Untuk ini digunakan fungsi password_hash. Parameter pertamanya menerima string, dan parameter kedua - algoritma enkripsi (tentang ini nanti), dan mengembalikan hash dari string tersebut bersama dengan garam.

Coba jalankan kode ini beberapa kali:

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

Anda akan mendapatkan hasil yang berbeda setiap kali dan dalam hasil tersebut bagian pertama string akan menjadi garam, dan bagian kedua - password yang digaram.

Misalkan kita memiliki hash, yang diperoleh dari fungsi password_hash dan suatu password. Untuk memeriksa, apakah ini hash dari password tersebut atau bukan, harus digunakan fungsi password_verify - parameter pertamanya menerima password, dan parameter kedua - hash, dan mengembalikan true atau false.

Mari kita lihat contohnya:

<?php $password = '12345'; // password $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // hash dari password ini } else { // hash bukan dari password ini } ?>

Apa yang ini berikan kepada kita dalam praktik: kita dapat tidak membuat field terpisah dalam database untuk menyimpan garam, tidak repot dengan pembuatan garam ini - PHP akan melakukan semuanya untuk kita!

Artinya, dalam database di field password kita akan menyimpan password yang digaram bersama dengan garamnya. Dalam hal ini password yang di-hash akan memiliki panjang yang lebih besar. Oleh karena itu dalam database kita perlu memperbaiki ukuran field password dan mengaturnya menjadi 60 karakter.

Sekarang mari kita perbaiki kode pendaftaran. Berikut adalah yang ada saat ini:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // panjang garam for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // karakter dari ASCII-table } return $salt; } $salt = generateSalt(); // garam $password = md5($salt . $_POST['password']); // ubah password menjadi hash yang digaram ?>

Dengan menggunakan password_hash kita dapat meringkasnya menjadi:

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

Demikian pula kode otorisasi akan disesuaikan:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // dapatkan user berdasarkan login $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // password yang digaram dari DB // Periksa kecocokan hash dari database dengan password yang dimasukkan if (password_verify($_POST['password'], $hash)) { // semua ok, otorisasi... } else { // password tidak cocok, tampilkan pesan } } else { // tidak ada user dengan login seperti itu, tampilkan pesan } ?>

Ubah otorisasi dan pendaftaran Anda menjadi fungsi-fungsi baru yang telah dipelajari.

Indonesia
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan cookie untuk operasi situs, analitik, dan personalisasi. Pemrosesan data dilakukan sesuai dengan Kebijakan Privasi.
terima semua atur tolak