Jika kata sandi disimpan sebagai teks biasa, begitu basis data bocor, seluruh akun langsung terekspos. Karena itu kata sandi disimpan setelah diubah menjadi hash, dan saat login, hash dari nilai masukan dibandingkan. Karena teks asli tidak disimpan, kata sandi tidak dapat langsung diketahui meski terjadi kebocoran.
Namun, hanya dengan hash SHA-256 biasa tidak cukup. Karena kata sandi yang sama selalu menghasilkan hash yang sama, penyerang dapat mencocokkan secara massal menggunakan rainbow table yang telah menghitung hash dari kata sandi umum sebelumnya. Untuk mencegahnya, tambahkan nilai acak per akun berupa salt sebelum di-hash.
Kecepatan juga menjadi masalah. SHA-256 sangat cepat sehingga penyerang dapat menebak miliaran per detik. Oleh karena itu, untuk kata sandi digunakan hash khusus yang sengaja lambat seperti bcrypt, scrypt, dan Argon2. Algoritma ini mengatur jumlah iterasi dan biaya memori untuk memperlambat serangan brute force secara signifikan.
Singkatnya, tiga prinsip penyimpanan kata sandi adalah salt + hash khusus yang lambat + parameter biaya yang memadai. SHA-256/512 biasa cocok untuk integritas file dan tanda tangan, tetapi untuk penyimpanan kata sandi gunakan algoritma khusus seperti Argon2.