Hashing khác encryption: encryption hai chiều (có khóa để giải mã lại). Hash một chiều — không thể đảo ngược. Mật khẩu phải hash, không encrypt: DB chỉ giữ hash, kể cả bị lộ cũng không lấy lại được mật khẩu gốc. Tuyệt đối không lưu plaintext.
Làm đúng (theo OWASP):
- Dùng hàm băm mật khẩu chuyên dụng, chậm có chủ đích: argon2id (khuyến nghị hàng đầu), bcrypt, hoặc scrypt/PBKDF2. Không dùng MD5/SHA-256 trần — chúng quá nhanh, dễ brute-force bằng GPU.
- Salt: chuỗi ngẫu nhiên duy nhất mỗi user, thêm vào trước khi băm → hai người cùng mật khẩu ra hash khác nhau, vô hiệu rainbow table (các thư viện trên tự sinh salt và nhúng vào output).
- Work factor / cost: chỉnh cho băm đủ chậm (vd ~vài trăm ms) để cản brute-force; tăng dần theo phần cứng.
- Cân nhắc pepper (secret chung, lưu tách khỏi DB) như lớp phụ.