Password Hashing & Storage — Security

Kenapa Tidak Boleh Simpan Password Plain Text? Jika database bocor dan password disimpan dalam plain text, semua akun pengguna langsung terekspos. Banyak…

Kenapa Tidak Boleh Simpan Password Plain Text?

Jika database bocor dan password disimpan dalam plain text, semua akun pengguna langsung terekspos. Banyak pengguna menggunakan password yang sama di berbagai layanan, sehingga dampaknya bisa meluas.

Evolusi Penyimpanan Password

Bcrypt: Standar Industri

Bcrypt dirancang khusus untuk password hashing dengan fitur:

// Node.js dengan bcrypt
const bcrypt = require("bcrypt");
const saltRounds = 12;

// Membuat hash
const hashedPassword = await bcrypt.hash("passwordUser", saltRounds);
// Hasil: $2b$12$LJ3m4yPO0eDKwRGBMlKP8e...

// Verifikasi
const isValid = await bcrypt.compare("passwordUser", hashedPassword);
// true jika cocok

PHP Password Hashing

// PHP menggunakan password_hash (menggunakan bcrypt secara default)
$hash = password_hash("passwordUser", PASSWORD_DEFAULT);

// Verifikasi
if (password_verify("passwordUser", $hash)) {
    echo "Password benar!";
}

// Cek apakah hash perlu di-rehash (cost factor berubah)
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
    $newHash = password_hash("passwordUser", PASSWORD_DEFAULT);
    // Update hash di database
}

Argon2: Generasi Berikutnya

Argon2 adalah pemenang Password Hashing Competition (2015) dan menjadi rekomendasi terbaru:

Best Practices

Yang akan kamu pelajari