Cara Hash Password yang Aman di PHP (password_hash)

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.

Alur Hash Password Aman
Alur Hash Password Aman

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.

Baca Juga

Ali Akbar

Software Developer yang fokus mengembangkan aplikasi berbasis Web dan Desktop. Senang mempelajari teknologi baru terutama di bidang web design dan web development.

View all posts by Ali Akbar →

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *