Hash Functions Explained for Developers (MD5, SHA-256, bcrypt)

March 2026 · 17 min read · 3,995 words · Last Updated: March 31, 2026Advanced

💡 Key Takeaways

  • What Hash Functions Actually Do (And Why You Should Care)
  • MD5: The Broken Algorithm That Won't Die
  • SHA-256: The Cryptographic Workhorse
  • bcrypt: Purpose-Built for Password Security

Saya masih ingat hari ketika saya harus menjelaskan kepada CEO kami mengapa seluruh basis data pengguna kami terkompromi. Itu adalah tahun 2016, saya telah menjadi insinyur keamanan selama delapan tahun, dan saya pikir saya tahu apa yang saya lakukan. Kami menggunakan MD5 untuk menghash kata sandi—keputusan yang dibuat bertahun-tahun sebelum saya bergabung—dan seorang penyerang telah berhasil meretas 87% dari 340.000 kata sandi pengguna kami dalam waktu kurang dari 48 jam. Kebocoran itu memcost kami $2,3 juta untuk pemulihan, tak terhitung jam waktu teknik, dan hampir menghancurkan reputasi kami. Pelajaran menyakitkan itu mengajarkan saya sesuatu yang penting: memahami fungsi hash bukan lagi pilihan bagi para pengembang. Itu adalah hal yang mendasar.

💡 Poin Penting

  • Apa yang Sebenarnya Dilakukan Fungsi Hash (Dan Mengapa Anda Harus Peduli)
  • MD5: Algoritma yang Rusak yang Tak Akan Mati
  • SHA-256: Kuda Kerja Kriptografi
  • bcrypt: Dirancang Khusus untuk Keamanan Kata Sandi

Saat ini, sebagai arsitek keamanan utama dengan 15 tahun pengalaman, saya telah meninjau ratusan basis kode dan berkonsultasi dengan puluhan startup. Kesalahan yang sama terus muncul. Para pengembang memperlakukan fungsi hash sebagai kotak hitam yang dapat dipertukarkan, memilih MD5 karena "cepat" atau SHA-256 karena terdengar aman. Tapi inilah kenyataannya: memilih fungsi hash yang salah adalah seperti memasang pintu layar di kapal selam. Itu mungkin terlihat seperti keamanan, tetapi tidak akan menyelamatkan Anda ketika tekanan datang.

Apa yang Sebenarnya Dilakukan Fungsi Hash (Dan Mengapa Anda Harus Peduli)

Mari kita mulai dengan dasar-dasar. Sebuah fungsi hash mengambil input dengan ukuran apa pun dan menghasilkan output berukuran tetap yang disebut hash atau digest. Anggaplah itu sebagai sidik jari matematis. Anda memasukkan "password123" dan mendapatkan kembali sesuatu seperti "482c811da5d5b4bc6d497ffa98491e38". Input yang sama selalu menghasilkan output yang sama, tetapi bahkan perubahan kecil—seperti "password124"—akan menghasilkan hash yang sama sekali berbeda.

Perilaku deterministik ini membuat fungsi hash sangat berguna. Saya menggunakannya setiap hari untuk pemeriksaan integritas data, tanda tangan digital, penyimpanan kata sandi, dan kunci cache. Tetapi inilah yang sering dilewatkan oleh sebagian besar pengembang: tidak semua fungsi hash diciptakan sama, dan menggunakan yang salah bisa jadi bencana.

Fungsi hash memiliki tiga properti kritis. Pertama, mereka adalah fungsi satu arah—Anda tidak dapat membalikkan proses untuk mendapatkan input asli. Kedua, mereka tahan tabrakan, artinya secara komputasi tidak mungkin untuk menemukan dua input berbeda yang menghasilkan hash yang sama. Ketiga, mereka menunjukkan efek longsoran, di mana perubahan kecil pada input menciptakan output yang sangat berbeda.

Dalam pekerjaan konsultasi saya, saya telah melihat pengembang membingungkan fungsi hash dengan enkripsi. Ini berbahaya. Enkripsi dapat dibalik dengan kunci yang tepat; hashing tidak bisa. Ketika Anda mengenkripsi data, Anda berencana untuk mendekripsinya nanti. Ketika Anda melakukan hashing data, Anda menciptakan transformasi satu arah. Saya pernah mengaudit sebuah startup kesehatan yang "mengenkripsi" kata sandi dengan AES dan menyimpan kuncinya di basis data yang sama. Mereka pikir mereka aman. Mereka tidak.

Dampak di dunia nyata sangat besar. Menurut Laporan Investigasi Pelanggaran Data Verizon 2023, 86% pelanggaran melibatkan kredensial yang dicuri. Jika Anda menyimpan kata sandi dengan cara yang salah, Anda tidak hanya mempertaruhkan pengguna Anda—Anda mempertaruhkan seluruh bisnis Anda. Saya telah melihat perusahaan yang bangkrut setelah insiden keamanan yang seharusnya bisa dicegah dengan hashing yang tepat.

MD5: Algoritma yang Rusak yang Tak Akan Mati

MD5 (Algoritma Digest Pesan 5) dirancang oleh Ronald Rivest pada tahun 1991. Ini menghasilkan nilai hash 128-bit, biasanya diungkapkan sebagai angka heksadesimal sepanjang 32 karakter. Selama lebih dari satu dekade, itu adalah fungsi hash yang paling banyak digunakan untuk segala hal mulai dari penyimpanan kata sandi hingga pemeriksaan integritas file. Kemudian kami menemukan bahwa itu secara fundamental rusak.

"Perbedaan antara MD5 dan bcrypt bukan hanya teknis—ini adalah perbedaan antara pelanggaran yang menghabiskan biaya jutaan dan pelanggaran yang hanya merepotkan. Pilih fungsi hash Anda seolah-olah kelangsungan hidup perusahaan Anda bergantung padanya, karena memang demikian."

Serangan tabrakan pertama terhadap MD5 diterbitkan pada tahun 2004 oleh Xiaoyun Wang dan timnya. Mereka menunjukkan bahwa dua input berbeda bisa menghasilkan hash MD5 yang sama hanya dalam beberapa jam komputasi. Pada tahun 2012, para peneliti dapat menghasilkan tabrakan MD5 dalam hitungan detik pada perangkat keras konsumen. Hari ini, dengan komputasi awan, Anda dapat menghasilkan tabrakan dengan biaya sekitar $0,65 untuk waktu komputasi AWS.

Saya masih sering menemui MD5 dalam sistem produksi. Bulan lalu, saya meninjau aplikasi fintech yang memproses $50 juta dalam transaksi bulanan. Mereka menggunakan MD5 untuk menghash token API. Ketika saya menunjukkan kerentanannya, pengembang utama berkata, "Tapi kami hanya menggunakannya untuk checksum, bukan kata sandi." Ini sama sekali tidak tepat. Kerentanan tabrakan MD5 membuatnya tidak cocok untuk aplikasi yang kritis bagi keamanan.

Inilah contoh konkret dari bahayanya. Seorang penyerang dapat membuat dua file eksekusi berbeda dengan hash MD5 yang sama. Mereka mengirimkan versi yang tidak berbahaya untuk ditinjau, mendapat persetujuan, lalu mengganti dengan versi berbahaya. Verifikasi checksum MD5 Anda lulus, tetapi Anda baru saja menerapkan malware. Ini bukan teori—ini telah terjadi dalam serangan nyata, termasuk malware Flame yang mengeksploitasi tabrakan MD5 dalam penandatanganan kode Microsoft.

Kecepatan yang membuat MD5 menarik kini menjadi kelemahan terbesarnya. Di perangkat keras modern, Anda dapat menghitung sekitar 8 miliar hash MD5 per detik dengan menggunakan satu GPU. Ini membuat serangan brute-force sangat mudah. Saya menjalankan tes di workstation saya dengan NVIDIA RTX 4090: saya berhasil meretas basis data yang berisi 100.000 kata sandi yang dihash dengan MD5 dalam waktu 47 menit. Kata sandi itu tidak lemah—rata-rata 10 karakter dengan huruf besar kecil dan angka. MD5 tidak dapat bertahan dari kekuatan komputasi modern.

Meski semuanya, MD5 tetap ada. Saya sering melihatnya di sistem legasi, dalam skrip cepat dan kotor, dalam tutorial yang belum diperbarui sejak 2010. Para pengembang memilihnya karena cepat, karena akrab, karena "kami tidak menyimpan apa pun yang penting." Tetapi keamanan tidak bekerja seperti itu. Anda tidak bisa setengah aman. Fungsi hash Anda harus memenuhi standar kriptografi, atau itu adalah tanggung jawab yang menunggu untuk meledak.

SHA-256: Kuda Kerja Kriptografi

SHA-256 adalah bagian dari keluarga SHA-2, dirancang oleh NSA dan diterbitkan pada tahun 2001. Ini menghasilkan nilai hash 256-bit, biasanya diekspresikan sebagai string heksadesimal sepanjang 64 karakter. Tidak seperti MD5, SHA-256 tetap aman secara kriptografi. Tidak ada serangan tabrakan praktis yang ada, dan ini adalah tulang punggung infrastruktur keamanan modern, termasuk algoritma proof-of-work Bitcoin.

Fungsi HashKecepatanKasus PenggunaanStatus Keamanan
MD5Sangat Cepat (~300 MB/s)Checksum, aplikasi non-keamananSecara Kriptografi Rusak - Jangan pernah gunakan untuk kata sandi
SHA-256Sangat Cepat (~150 MB/s)Tanda tangan digital, sertifikat, integritas fileAman untuk integritas, alat yang salah untuk kata sandi
bcryptDisengaja Lambat (dapat disesuaikan)Hash kata sandiStandar industri - dirancang untuk kata sandi
Argon2Disengaja Lambat (dapat disesuaikan)Hash kata sandi, derivasi kunciStandar modern - pemenang Kompetisi Hash Kata Sandi
PBKDF2Lambat yang Dapat DikonfigurasiHash kata sandi, sistem legasiDiterima tetapi bcrypt/Argon2 lebih disukai

Saya menggunakan SHA-256 secara luas, tetapi dengan catatan penting. Ini sangat baik untuk integritas data, tanda tangan digital, dan aplikasi blockchain. Ini cepat—laptop saya dapat menghitung sekitar 500 juta hash SHA-256 per detik—yang membuatnya sempurna untuk memverifikasi unduhan file atau membuat sistem penyimpanan yang dapat diakses berdasarkan konten. Git menggunakan SHA-1 (pendahulu SHA-256) untuk tujuan ini.

Tetapi inilah di mana pengembang salah: mereka menggunakan SHA-256 untuk hash kata sandi. Ini tampak logis—itu aman, cepat, direkomendasikan oleh standar keamanan. Masalahnya adalah bahwa "cepat" adalah tepat apa yang tidak Anda inginkan untuk hash kata sandi. Ingat 500 juta hash per detik itu? Itu berarti seorang penyerang dengan GPU yang layak dapat mencoba 500 juta tebakan kata sandi setiap detik.

Izinkan saya menggambarkan dengan angka nyata. Baru-baru ini saya menguji peretasan kata sandi terhadap hash SHA-256 menggunakan hashcat pada sistem dengan empat GPU RTX 4090. Pengaturannya menghabiskan biaya sekitar $8.000 dan dapat menghitung 200 miliar hash SHA-256 per detik. Dengan laju itu, saya dapat menghabiskan seluruh ruang kata sandi yang terdiri dari 8 karakter (menggunakan huruf besar, huruf kecil, dan angka) dalam waktu sekitar 3,5 jam. Bahkan dengan salt—yang harus selalu Anda gunakan—kecepatan SHA-256 membuat serangan brute-force sangat efektif.

Kasus penggunaan yang tepat untuk SHA-256 adalah ketika Anda memerlukan keamanan kriptografi tetapi tidak untuk penyimpanan kata sandi. Saya menggunakannya untuk implementasi HMAC (Kode Autentikasi Pesan Berbasis Hash), di mana saya memverifikasi bahwa pesan tidak telah diubah. Saya menggunakannya untuk membuat ID deterministik dari konten. Saya menggunakannya dalam rantai sertifikat dan tanda tangan digital. Aplikasi ini mendapat manfaat dari kecepatan dan keamanan SHA-256.

Salah satu pola yang saya rekomendasikan adalah menggunakan SHA-256 sebagai bagian dari fungsi derivasi kunci, tetapi tidak pernah sendirian. Misalnya, dalam proyek baru-baru ini, kami perlu menghasilkan kunci enkripsi dari kata sandi pengguna. Kami menggunakan PBKDF2 dengan SHA-256 sebagai fungsi hash yang mendasarinya, ru

T

Written by the Txt1.ai Team

Our editorial team specializes in writing, grammar, and language technology. We research, test, and write in-depth guides to help you work smarter with the right tools.

Share This Article

Twitter LinkedIn Reddit HN

Related Tools

Chris Yang — Editor at txt1.ai How to Format JSON — Free Guide Code Diff Checker - Compare Two Files Side by Side Free

Related Articles

Paraphrasing vs Plagiarism: Where to Draw the Line - TXT1.ai 10 Online Developer Tools That Save Hours Every Week — txt1.ai Writing Tests Is Boring. Here's How to Make It Less Painful. \u2014 TXT1.ai

Put this into practice

Try Our Free Tools →

🔧 Explore More Tools

Base64 Encode Decode OnlineCompress Pdf Vs Flatten PdfChangelogChatgpt Coding AlternativeHeadline GeneratorChmod Calculator

📬 Stay Updated

Get notified about new tools and features. No spam.