#1. Hashing (Một chiều)
- Cơ chế: Laravel sử dụng
BcrypthoặcArgon2idmặc định. - Tại sao không dùng MD5/SHA1? Hashing là hàm một chiều nhưng MD5/SHA1 quá nhanh, hacker có thể brute-force bằng GPU. Bcrypt/Argon2id có “cost factor” để làm chậm quá trình băm, chống lại tấn công brute-force.
- Kinh nghiệm: Luôn dùng
Hash::make()hoặcHash::check()thay vì so sánh chuỗi thô.
#2. Encryption (Hai chiều)
- Cơ chế: Laravel dùng
AES-256-CBC(mã hóa đối xứng). CầnAPP_KEYđể encrypt và decrypt. - Lưu ý: Nếu bạn đổi
APP_KEY, toàn bộ dữ liệu đã encrypt sẽ không thể giải mã. Đừng bao giờ làm điều này trên production!
#3. Câu hỏi nhanh
Q: Tại sao phải dùng Hashing cho mật khẩu? A: Để đảm bảo ngay cả khi Database bị hack (SQL Injection), hacker cũng không lấy được mật khẩu gốc. Chỉ có HASH được lưu.
Q: Khi nào dùng Encryption thay vì Hashing? A: Khi bạn cần lấy lại dữ liệu gốc sau này (ví dụ: token thanh toán của khách hàng). Hashing không cho phép lấy lại dữ liệu gốc.