Menyimpan password pengguna dengan aman adalah tanggung jawab utama setiap developer. Jika database bocor dan password tersimpan apa adanya (atau dengan MD5), akun pengguna langsung terancam. Artikel ini membahas cara hash password yang aman di PHP.

Kenapa Jangan MD5 atau SHA1?
MD5 dan SHA1 dirancang untuk cepat, sehingga penyerang bisa menebak jutaan kombinasi per detik (brute force) atau memakai “rainbow table”. Keduanya sudah tidak aman untuk password. Jangan pula menyimpan password sebagai teks biasa.
Solusi: password_hash()
PHP menyediakan password_hash() yang memakai algoritma kuat (bcrypt) dengan “salt” otomatis dan sengaja lambat — membuat brute force tidak praktis:
<?php $password = "rahasia123"; $hash = password_hash($password, PASSWORD_DEFAULT); echo $hash; // contoh: $2y$10$eImiTXuWVxfM37uY4JANjQ... ?>
Simpan $hash ini ke kolom VARCHAR(255) di database (jangan lebih pendek, hash bisa panjang).
Memverifikasi Password saat Login
Saat login, jangan meng-hash lalu membandingkan manual. Gunakan password_verify() yang mencocokkan dengan aman:
<?php
// $hashTersimpan diambil dari database
if (password_verify($_POST["password"], $hashTersimpan)) {
echo "Login berhasil!";
} else {
echo "Password salah.";
}
?>
Anda tidak perlu (dan tidak bisa) “men-decrypt” hash — password_verify() menangani semuanya.
Upgrade Hash Secara Otomatis
Bila kelak algoritma diperkuat, cek dan perbarui hash saat login:
<?php
if (password_verify($input, $hash)) {
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
$baru = password_hash($input, PASSWORD_DEFAULT);
// simpan $baru ke database
}
}
?>
Kesalahan Umum
- Kolom password terlalu pendek — hash terpotong sehingga verifikasi selalu gagal. Pakai
VARCHAR(255). - Meng-hash password dua kali atau menambah salt manual — tidak perlu,
password_hash()sudah mengurusnya. - Masih memakai MD5 untuk sistem lama — migrasikan ke
password_hash()saat pengguna login.
Kesimpulan
Selalu gunakan password_hash() untuk menyimpan password dan password_verify() untuk memeriksanya — jangan pernah MD5, SHA1, atau plain text. Ini melindungi pengguna Anda bahkan jika database bocor. Keamanan password adalah dasar kepercayaan pengguna terhadap aplikasi Anda.
Referensi: untuk pendalaman, kunjungi panduan keamanan resmi PHP.

