Menggunakan Password Hash dan Password Verify pada PHP/CodeIgniter
Pada tulisan kali kita akan berbicara mengenai fungsi password_hash()
dan password_verify()
yang ada pada PHP.
Password_hash adalah salah satu fungsi yang dimiliki PHP untuk melakukan hashing menggunakan algoritma satu arah (one-way hashing). Fungsi ini terdapat pada PHP versi 5.5 ke atas.
Sedangkan Hash sendiri adalah suatu mekanisme untuk memetakan suatu data yang diinputkan berupa teks polos (plain text) menjadi output berupa checksum atau fingerprint (kode acak dengan panjang karakter yang tetap).
Karena password_hash menggunakan algoritma hashing satu arah, maka data yang sudah terhash tidak akan bisa dikembalikan lagi menjadi data aslinya.
Misalkan saja kita memiliki sebuah password, kemudian password tersebut dihash menggunakan fungsi password_hash()
, maka password tersebut akan berubah menjadi kode acak seperti ini:
$2y$10$EnIi90KP.0BqCVJgK21BrO3xzArxCZaiAPaUebCw.K2Xw71QOCZv2
Contoh fungsi password_hash:
Kode di atas akan menghasilkan output:
$2y$10$EnIi90KP.0BqCVJgK21BrO3xzArxCZaiAPaUebCw.K2Xw71QOCZv2
Penjelasan kode di atas adalah sebagai berikut:
password_hash
adalah fungsi yang digunakan untuk melakukan hashing.secret password
adalah password yang kita buat.PASSWORD_DEFAULT
adalah algoritma bawaan untuk melakukan hash yaitu menggunakan BCRYPT dan akan menghasilkan output sepanjang 60 karakter. Sangat disarankan untuk membuat field data pada database sepanjang 255 karakter, sebab output hasil hash dapat lebih panjang sesuai dengan algoritma yang digunakan.$options
hanya sebuah nama variabel array untuk menampung nilai cost. Nama variabel$options
ini dapat kita ganti sesuka hati. Variabel$options
ini tidak wajib.cost
adalah parameter yang digunakan untuk menentukan seberapa banyak hash dilakukan. Untuk BCRYPT, jika nilainya 10 maka proses hashing dilakukan sebanyak 2^10 atau 1024 kali.
Kode output hasil dari proses hashing tersebut kita simpan dalam database untuk membuat autentikasi login user dengan password_verify()
.
Password_verify adalah fungsi PHP yang berguna untuk melakukan verifikasi (mencocokkan) data yang telah terhash memakai fungsi password_hash().
Contohnya fungsi password_verify seperti ini:
$hashed
adalah variabel untuk menampung nilai data yang dihasilkan dari proses hashing dengan fungsi password_hash().password_verify
adalah fungsi untuk mencocokkan data asli dengan data yang sudah terhash.secret password
adalah password yang kita buat.
Lebih jelasnya begini,
Fungsi password_verify akan mencocokkan data asli (secret password
) dengan data yang terhash ($hash
). Jika data cocok maka akan menampilkan pesan password is valid! dan jika tidak cocok maka akan menampilkan Invalid password.
Implementasi fungsi password_hash() dan password_verify()
Untuk menerapkan fungsi password_hash()
dan password_verify()
pada login aplikasi, silakan perhatikan dan amati contoh kode autentikasi yang sudah saya buat. Pada kode tersebut sudah saya tuliskan penjelasannya.
Agar lebih mudah mempelajari cara penerapan fungsi password_hash()
dan password_verify()
, silakan download source code login PHP di bawah ini:
Fungsi password_hash sangat direkomendasikan untuk mengenkripsi password karena menggunakan algoritma hashing satu arah. Karena meskipun kita tau output password yang terhash, mustahil bagi kita untuk tahu password aslinya.
Jadi mulai sekarang, jika kalian akan membuat sebuah aplikasi dengan PHP, pastikan untuk menggunakan password_hash()
dan password_verify()
untuk keamanan loginnya.
Referensi:
- https://secure.php.net/manual/en/function.password-hash.php
- https://secure.php.net/manual/en/function.password-verify.php
Artikel terkait:
Aplikasi manajemen surat menyurat dengan PHP dan MySQLiTutorial membuat import data csv pada CodeIgniterMembuat base URL dinamis pada CodeIgniterTutorial membuat format rupiah pada input HTMLMenampilkan format rupiah dengan PHP