Azis Hapidin
Mengenal Encoding, Encryption dan Hashing

Bagi yang sudah lumayan lama terjun di dunia pemrograman pasti sudah tidak asing lagi dengan istilah Encode, Encrypt dan Hash. Sekilas ketiganya mempunyai fungsi yang hampir sama yaitu untuk merubah suatu bentuk ke bentuk lainnya. Akan tetapi, walaupun mirip, ketiga nya mempunyai perbedaan cukup mendasar yang penting untuk kita ketahui.

Encoding

Fungsi encoding adalah untuk merubah data dari satu bentuk ke bentuk lainnya agar data bisa dikonsumsi dengan baik oleh sistem yang lain, proses encoding ini biasanya bukan digunakan untuk menyimpan data rahasia karena setelah data kita encode, kita bisa dengan mudah melakukan decoding (kebalikan dari encoding). Biasanya ketika developer membuat fungsi encode, maka doi membuat sepaket beserta fungsi untuk decode nya. Contoh:

  • Ada base64_encode(), untuk decode nya base64_decode()
  • Ada urlencode(), untuk decode nya urldecode()
  • Ada rawurlencode(), untuk decode nya rawurldecode()
  • Dan beberapa fungsi lainnya.

Encryption

Berbeda dengan encoding diatas, encryption biasa digunakan untuk tujuan mengamankan data tertentu. Untuk meng- encrypt sebuah data maka setidaknya dibutuhkan 3 parameter yaitu nilai yang ingin di encrypt, cipher (jenis algoritma) dan juga key (kunci). Istilah untuk mengembalikan data yang sudah di encrypt menjadi seperti semula adalah decrypt, untuk melakukan decrypt kita juga membutuhkan setidaknya 3 parameter yaitu nilai yang akan di decrypt, cipher (jenis algoritma) dan juga key (kunci). Yang harus diperhatikan adalah key saat proses encrypt dan decrypt wajib sama. Jika key tidak sama, maka proses decrypt tidak akan bisa dilakukan atau hasil tidak akan sesuai.

Berikut contoh penggunaan encryption dan decryption di Laravel:

Perhatikan percobaan terakhir pada contoh kode diatas, decrypt gagal karena key/MAC Message Authentication Code) tidak valid.

Hashing

Hashing merupakan salah satu teknik untuk merahasiakan data seperti encryption, hanya saja perbedaannya adalah ketika kita sudah hash sebuah data maka data tersebut tidak bisa kita kembalikan seperti semula atau yang sering disebut dengan istilah enkripsi satu arah. Jadi satu-satunya cara untuk memastikan bahwa data tersebut benar adalah dengan mencocokan hasil hash nya. Beberapa algoritma hash yang cukup populer diantaranya adalah md5, sha1, whirlpool, gost, bcrypt, dll. Bisa cek disini

Sejauh yang saya tahu, biasanya Hash ini sering dimanfaatkan untuk:

  • Mengecek Integritas Data

Fungsi hash sangat peka terhadap perubahan sedikitpun pada data, perubahan 1 bit saja akan bisa meurubah hash secara signifikan. Jadi semisal kita mendapat sebuah file dengan ukuran cukup besar dari sistem lain, untuk memastikan bahwa data terkirim secara utuh maka kita cukup membandingkan hash nya saja.

Berikut contoh penggunaan Hash untuk mengecek integritas data:

Kemudian saya coba tambahkan 1 karakter dash (-) pada isi file tersebut, ketika saya coba perintah yang sama dengan diatas hasilnya jadi:

Di screenshot diatas bisa kita lihat bahwa hasil shasum nya langsung berbeda.

  • Menyimpan Password

Menyimpan password menggunakan Hash lebih aman dibanding menggunakan encryption karena jika suatu saat data bocor, maka password tetap tidak akan diketahui oleh pembobol.

Berikut contoh penggunaan Hash untuk menyimpan password:

Tips Menggunakan Hash untuk Password

Ketika menggunakan hash untuk password, kita sebetulnya bebas menetukan apa algoritma yang akan digunakan. Kita bisa saja bcrypt, md5, sha1, dll. Tapi biasanya kebanyakan aplikasi menggunakan algoritma bcrypt dibanding md5 atau sha1. Kenapa?

Setiap kita melakukan hashing menggunakan algoritma bcrypt maka akan menghasilkan nilai hash yang berbeda walaupun dengan masukan yang sama. Cek gambar dibawah:

Sedangkan jika kita menggunakan md5 atau sha, mereka akan memberikan nilai yang sama. Sebagai contoh kita akan melakukan hash kata indonesia dengan algoritma md5 dan sha1, maka untuk md5 kita mendapat nilai cda2c99fbf5e19f20d331299c15a4491 dan untuk sha1 kita mendapat nilai f99aecef3d12e02dcbb6260bbdd35189c89e6e73. Nah masalahnya adalah di internet sudah bertebaran nilai asli dari kedua hasil hash diatas. Kita cukup search di google: HASIL_HASH ALGORITMA, maka kita bisa dengan mudah menemukan nilai asilnya terutama jika password adalah kata-kata umum yang sering digunakan.

Sekian artikel kali ini, semoga bermanfaat. Jika ada yang ingin di diskusikan mangga ditunggu di kolom komentar.

Terima kasih 🙂