Alasan kenapa sebaiknya jangan gunakan base64_encode untuk Password Hashing

base64_encode()

Assalamu’alaikum šŸ™‚

Halo, sob. Apakah anda pernah di ajarkan oleh Bapak/Ibu Guru atau Dosen anda tentang cara mengamankan password User yang tersimpan di dalam Database dengan metode Hashing? Atau kalau bukan oleh Ibu/Bapak Guru atau Dosen, apakah pernah di jumpai di tutorial luaran sana? Hanya saja, “Hashing” disini menggunakan base64_encode?

Pernahkah anda berpikir kalau ada yang aneh dari fungsiĀ base64_encode()Ā untuk mengamankan sebuah kata sandi pengguna, atau anda malah “melawan” (*Arti “melawan” disini maksudnya anda melakukan hal yang melenceng dari penjelasan Ibu/Bapak Guru, Dosen anda atau dari Tutorial Luaran sana, misal Ibu/Bapak Guru ngomong A, yang anda lakukan malah B, dsb, bukan memberontak) dari penjelasan tersebut?

Ya, saya juga waktu pertama kali di ajarkan fungsiĀ base64_encode()Ā di waktu saya kuliah, saya merasa aneh. Bukan hanya itu saja, saya malah “melawan” dari penjelasan itu dan saya menggunakan fungsi lainnya untuk melakukan Password Hashing.

Lalu, mana yang lebih baik? Dan, apa alasan nya? (Hampir) Semua pertanyaan itu akan di jawab di dalam Artikel, tapi sebelum itu, saya akan menjelaskan sedikit tentang fungsi base64_encode()Ā terlebih dahulu. Maka dari itu, silahkan anda membaca artikel nya agar paham šŸ™‚

Apa itu base64_encode()?

base64_encode()Ā merupakan sebuah fungsi dari PHP untuk melakukan penyandian (atau disebut “encoding”) dari Teks/String ke Base64.

Untuk mengeksekusinya, anda tinggal sisipkanĀ echo base64_encode($teks);. VariableĀ $teksĀ bisa anda ganti dengan variable sesuka anda, atau bisa gunakan echo base64_encode("Masukkan Teks nya disini");, karena tipe teks yang ingin di masukkan berupa String, maka saya mengapitnya dengan tanda kutip dua. Lalu, simpan file tersebut sebagai PHP, simpan di Document Root XAMPP atau LAMP (Linux Apache2, MariaDB/MySQL, PHP) anda, lalu buka di web browser anda.

Jika anda ingin mempelajari nya lebih lanjut, silahkan kunjungi Halaman Dokumentasi Resmi PHPĀ atau klik disini. Atau, bisa anda lihat contoh nya di bawah ini:

Apa yang salah dengan base64_encode?

Jika anda di ajarkan atau di tutorial luar-an sana ada yang menjelaskan dan anda mempercayai bahwa fungsiĀ base64_encode()Ā itu untuk meng-enkripsi sebuah kata sandi, maka anda salah besar. Faktanya, jangankan perbedaan antara Encoding dan Enkripsi, Hashing dan Enkripsi saja sudah berbeda.Ā 

Enkripsi merupakan teknik penguncian suatu file atau teks dengan menggunakan sebuah file yang di sebut dengan “key”, dan untuk membukakan kunci tersebut, maka di perlukan juga “key” untuk membuka nya. Ini ibarat seperti anda sedang mengunci mobil anda dan jika anda mengunci nya, maka orang lain pun “harusnya” tidak bisa membukakan mobil anda, selain anda sendiri (sebagai pemilik mobil tersebut).Ā 

Sedangkan Encoding merupakan teknik untuk mengkonversi suatu pesan atau teks (String) atau juga file dengan mengubah pesan atau teks menjadi suatu yang “acak”. Namun, Proses ini bisa di pecahkan dengan mudah, yakni melakukan Decoding, tanpa perlu menggunakan “key” untuk membuka nya seperti pada Enkripsi. Biasanya “Encoding” ini di tujukan untuk melakukan transaksi antar data melalui medium teks.

Dengan di gunakannya Encoding untuk transaksi seperti ini, maka integritas pesan pun akan terjamin dan kemungkinan tidak akan di modifikasi selama transaksi berlangsung. Atau, mungkin ini akan berguna untuk memecahkan sebuah kasus, yang mana sebuah program tidak dapat menampung karakter spesial (seperti {}|\ dll) di dalam programnya, atau lainnya.

Contoh Penggunaan Sistem Encoding yaitu Base64. Base64 ini merupakan sistem encoding (penyandian) dari data biner atau string menjadi teks acak. Base64 sendiri terdiri dari 64 Karekter, di antaranya A-Z, a-z, 0-9 sisanya yaitu / (garis miring), + (plus) dan = (sama dengan). Karena menggunakan Sistem Encoding, Base64 sebenarnya bisa di pecahkan dengan mudah melalui Decoding.

Di PHP sendiri, selain ada fungsiĀ base64_encode()Ā untuk melakukan Encoding dengan Base64, ada juga fungsiĀ base64_decode()Ā untuk melakukan Decoding. Kedua nya saling melengkapi, silahkan anda kunjungi website PHP untuk lebih lanjut, atau klik link yang telah saya sediakan untuk menjelaskan fungsinya.

Sedangkan Hashing merupakan proses pengubahan Data Karakter String ke dalam nilai acak dalam jumlah karakter yang tetap atau menyesuaikan dengan algoritma yang telah di gunakan. Hasil teks/Karakter String yang telah di Hash, (Harusnya) tidak akan bisa di kembalikan lagi ke semula, tidak seperti Enkripsi yang bisa di kembalikan dengan menggunakan “Key” pada proses Dekripsi, dan juga tidak seperti Encoding yang bisa Decoding.

Ini ibarat seperti Air Putih yang bening di campur dengan Air Sirup Marjan ke dalam gelas, Air yang telah di campur itu apakah bisa di kembalikan ke air bening lagi? Tentu saja harusnya tidak, kan? Namun, kita bisa membuat hal yang serupa, yakni mencampurkan Air Putih yang Bening dengan Sirup Marjan ke dalam 1 gelas dengan takaran yang sama seperti sebelumnya jika ingin mencocokan. Nah, inilah hashing, yang hasil nya tidak akan bisa di kembalikan ke semula, tapi bisa di cocokan sama seperti ibarat tadi.

Dan, teknik Hashing inilah yang paling sering di gunakan sebagai pengaman kata sandi untuk Akun dari layanan internet seluruh dunia, bila di bandingkan dengan teknik Enkripsi.Ā 

Jadi, Encoding ini bukan merupakan teknik menyembunyikan dan mengamankan Informasi yang sebenarnya, seperti hal nya Enkripsi dan Hashing. Salahnya dimana? Salahnya jika anda menggunakan Base64 untuk menyimpan kata sandi yang di ketikkan oleh pengguna yang telah di ‘hash’ ke dalam Database. Apa saja alasannya, silahkan ke halaman berikutnya untuk mengetahui nya šŸ™‚

Mungkin Anda juga menyukai