Penggunaan fungsi HASHIG pada PHP

Haaai kawan! ^^ Apa kabar? Sudah lama sekali sekali tak bersua di blog saya yang sederhana ini. Daaaan, tidak terasa ya sekarang sudah masuk minggu ke dua di bulan Ramadhan. Selamat menunaikan ibadah shaum di bulan suci Ramadhan untuk kita yang menjalankan.. ^^ Gimana shaumnya? masih pada semangat - semangat kan? oh iya, sebelumnya saya minta maaf jikalau ada salah - salah kata selama saya menulis artikel di blog saya ini..

Lalu, apa yang akan kita bahas sekarang ya? Nah, sekarang ini saya ingin membahas soal mengamankan password. Jadi, belakangan ini saya sering merhatiin postingan di grup PHP Indonesia. Dan salah satu dari pertanyaan yang sering muncul di grup kami, ialah tentang keamanan data, terutama dalam hal menyimpan password di database. Member grup sering bertanya cara terbaik untuk menyimpan password. Apakah pakai md5 atau SHA1? FYI, md5 dan SHA1 itu termasuk fungsi hash.

Hash adalah fungsi satu arah dimana jika kita memasukkan suatu data maka akan menghasilkan output berupa checksum atau fingerprint dari data tersebut.

Hash lho ya bkn enkripsi! ^^ kalau enkripsi itu fungsi dua arah, setiap data yang dienkripsi nanti bisa didekripsi lagi untuk dapetin data asli. Jadi, kalau hash itu ga bisa dienkripsi lagi. (dan ini pun seringkali ditanyakan di grup, cara mendekripsi md5.)

Ok, back to topic.. lalu, apa yang mesti digunakan untuk mengamankan password di database? apa pakai md5 atau SHA1? JAWABANNYA, bukan kedua -duanya. Lalu mesti pakai apa dong? nah, kabar baiknya, banyak sekali yang merekomendasikan untuk pakai algoritma yang lebih kuat buat hashing password, yaitu pakai bcrypt. Nah, fungsi bcrypt ini udah ada di fungsi bawaannya PHP lho! Apa aja itu? Check this out ya!

Jadi, ada empat fungsi yang digunakan dalam hashing password:

  1. password_hash() :: fungsinya untuk hashing password.
  2. password_verify() :: kalau yang ini buat verifikasi password yang sudah dihash pakai fungsi password_hash().
  3. password_needs_rehash() :: digunakan kalau password perlu dihash ulang.
  4. password_get_info() :: fungsi ini bakalan ngebagiin info tentang algoritma dan juga opsi yang digunakan ketika kita hashing password.

Sekarang, kita coba pakai fungsi password_hash() sama password_verify().

Step 1 pertama kita buat file php dengan nama password_hash.php, lalu kita ketik sintaks di bawah ini:

 <?php 
      echo password_hash("gungunpriatna", PASSWORD_DEFAULT)."\n"; 
 ?> 

Save filenya, lalu kita coba run di browser. nah hasil hashnya itu bakalan beda-beda lho. Random gitu. Daaan di bawah ini salah satu contoh hasilnya:

Penggunaan fungsi HASHIG pada PHP

Kita simpan dulu hasil hashnya ya.. saya pastekan di sini:

 $2y$10$uYEYjBw.sXE02evtHIsqwO2OE/XEIMYyXMI4FadLbpfhIvsg5dXba  

Step 2 Sekarang kita buat file untuk verifikasi password yang udah kita hash tadi pakai password_verify(). Kasih nama filenya password_verify.php, lalu selanjutnya kita ketik sintaks di bawah ini di dalam file password_verify.php.

 <?php 

 // diambil dari hasil file password_hash.php 

 $hash = '$2y$10$uYEYjBw.sXE02evtHIsqwO2OE/XEIMYyXMI4FadLbpfhIvsg5dXba'; 

 if (password_verify('gungunpriatna', $hash)) { 

   echo 'Password kamu benar, Selamat!'; 

 } else { 

   echo 'Password kamu salah, silakan coba lagi..'; 

 } 

 ?> 

Save file password_verify.php. Lalu coba kita run di browser dan hasilnya adalah ....

Penggunaan fungsi HASHIG pada PHP

Yep, password kamu benar :D

Nah, sekarang kamu coba kamu perhatiin sintaks yang ada di file password_verify.php. Di variabel $hash itu ada hasil hashing password dari file password_hash.php yang udah kita run sebelumnya (dan udah saya catat di atas). Begitu kita masukan ke dalam parameter fungsi password_verify(), biarpun hasil dari password_hash() itu acak banget, kalau kata yang dijadiin password dan hashnya itu cocok, maka password_verify() akan bernilai TRUE dan selanjutnya bakalan menampilkan output di browser Password kamu benar, Selamat!.


Sebagian besar developer masih menggunakan algoritma hash yang lebih tua dan lebih lemah seperti MD5 dan SHA1. Kabar baiknya ada algoritma yang banyak direkomendasikan dan diakui sebagai 'best practice' untuk hashing password, yaitu menggunakan bcrypt.

Semoga bermanfaat.. ^^


Referensi :

  • Dokumentasi PHP tentang password_hash()