Matinya MD5 Sebagai Password Hash, Programmer PHP Medioker Wajib Tau!


LATAR BELAKANG

Pada kelas Pemrograman Web, khususnya di sekolah kejuruan maupun kuliah Sistem Informasi/Informatika, hampir semua pengajar memperkenalkan konsep hashing dengan contoh paling sederhana: fungsi md5() di PHP. Alasannya jelas, mudah dipahami, satu baris kode, dan langsung terlihat hasilnya.

<?php
echo md5("password123");
// Output: 482c811da5d5b4bc6d497ffa98491e38
	

Bagi pemula, hasil berupa string acak ini terasa “ajaib” dan dianggap sudah cukup untuk mengamankan password. Modul praktikum lama pun banyak yang masih menggunakan MD5 sebagai contoh utama. Namun, seiring perkembangan teknologi, MD5 kini dianggap usang dan tidak aman.

Sejarah Singkat MD5

MD5 (Message-Digest Algorithm 5) dikembangkan oleh Ronald Rivest pada tahun 1991. Awalnya, algoritma ini digunakan untuk memastikan integritas data—apakah sebuah file berubah atau tidak. Karena sifatnya cepat dan ringan, MD5 kemudian dipakai secara luas, termasuk untuk hashing password di aplikasi web. Sayangnya, kecepatan inilah yang menjadi kelemahan besar di era komputasi modern, jutaan hash MD5 bisa dihitung per detik, membuat brute force dan rainbow table sangat efektif.

PEMBAHASAN

Kelemahan Teknis MD5 Pada Era Modern
  1. Cepat Dihitung
    Komputer Modern bisa dengan mudah brute force bisa mencoba jutaan kombinasi per detik.
  2. Rainbow Table
    Ada database hash siap pakai yang bisa langsung mencocokkan hasil MD5 dengan password asli namanya Rainbow table. Raibow Table adalah database yang berisi kumpulan data yang sudah dihitung sebelumnya (precomputed) untuk membalikkan fungsi hash kriptografi, biasanya digunakan untuk meretas kata sandi. Ini menyimpan pasangan antara kata sandi teks biasa (plaintext) dan nilai hash-nya, memungkinkan peretas menemukan kata sandi asli dengan cepat tanpa melakukan brute-force dari nol
  3. Collision
    Dua input berbeda bisa menghasilkan nilai hash sama.
  4. Deprecated
    PHP dan banyak framework dan library modern tidak lagi merekomendasikan MD5 untuk password, PHP sendiri udah menandai sebagai deprecated sejak 2017.
<?php
$password = "rahasia123";
$hashed = md5($password);

if (md5($_POST['password']) === $hashed) {
    echo "Login berhasil";
}
	

Implementasi di atas sudah tidak aman karena hash ini bisa dengan mudah dicari di rainbow table. Password “rahasia123” kemungkinan sudah ada ribuan kali di database yang bocor ke publik.

<?php
$password = "rahasia123";
$hashed = password_hash($password, PASSWORD_DEFAULT);

if (password_verify($_POST['password'], $hashed)) {
    echo "Login berhasil";
} else {
    echo "Password salah";
}
	

Implementasi di atas jauh lebih aman karena menggunakan algoritma kuat (bcrypt/argon2), hasil hash terdapat salt otomatis yang membuat setiap hash unik walau password sama, menggunakan computationally expensive yang memperlambat brute force dan future-proof yang bisa upgrade algoritma tanpa ubah kode.

KESIMPULAN

MD5 sudah mati untuk password hashing. Jangan gunakan lagi di aplikasi PHP, meski tutorial lama masih banyak beredar. PHP sendiri secara resmi sudah menetapkan MD5 sebagai deprecated pada 2017, dan diperkenalkan password_hash() dan password_verify() sebagai standar hashing yang baru. Hashing password bukan sekadar “mengacak string”, hashing butuh algoritma yang lambat dan aman agar brute force tidak efektif.

Saya seorang programmer dengan fokus developer Web dan Android.