Hashing là một chiều (không đảo ngược được), encryption đảo ngược được khi có key, encoding đảo ngược được mà không cần key — dùng nhầm loại là lỗi bảo mật kinh điển.
- Hashing — biến input thành chuỗi độ dài cố định, không thể suy ngược: lưu password (bcrypt/argon2), checksum kiểm tra toàn vẹn file.
- Encryption — mã hóa để giải mã lại được bằng key: TLS/HTTPS, mã hóa dữ liệu nhạy cảm trong DB; symmetric (AES — chung một key) vs asymmetric (RSA — cặp public/private key).
- Encoding — đổi định dạng biểu diễn, ai cũng decode được: base64, URL encoding — không phải bảo mật; password base64 trong config vẫn là plaintext.
- Salt — chuỗi ngẫu nhiên nối vào password trước khi hash, mỗi user một salt khác nhau: hai user trùng password vẫn ra hash khác nhau, và vô hiệu hóa rainbow table (bảng hash tính sẵn). bcrypt/argon2 tự sinh salt và nhúng vào chuỗi output.
- Lỗi kinh điển — hash password bằng MD5/SHA-256 thuần (các hàm này được thiết kế để nhanh → brute-force dễ; password cần hàm hash cố tình chậm); nhầm encoding với encryption.