Trung BìnhNode.js iconNode.js

bcrypt là gì? Cách dùng để hash password?

bcrypt được thiết kế đặc biệt cho password hashing — khác hoàn toàn SHA-256/MD5 vốn được tối ưu để NHANH (SHA-256 hash 10 tỷ lần/giây trên GPU, bcrypt cost=12 chỉ ~250 lần/giây).

  • Adaptive cost factor: saltRounds (cost) tăng thì thời gian tăng gấp đôi — cost=10 ~100ms, cost=12 ~400ms, cost=14 ~1.6s.
  • Chọn cost sao cho ~250ms trên server của bạn và tăng dần theo năm khi phần cứng mạnh lên.
  • Built-in salt: bcrypt tự tạo random salt unique per password và nhúng vào hash output — tránh rainbow table attacks và đảm bảo cùng password tạo hash khác nhau mỗi lần.
  • Timing attacks: bcrypt.compare() là constant-time comparison, không dùng === để so sánh hash.
  • Argon2 là alternative hiện đại hơn (winner PHC 2015): argon2id kháng GPU và side-channel attacks tốt hơn, được OWASP khuyến nghị năm 2023+; dùng argon2 package trong Node.js.

Pitfall: hash password trong service layer, không trong model hook — dễ bị double-hash nếu hook chạy lại khi update field khác.

Xem toàn bộ Node.js cùng filter theo level & chủ đề con.

Mở danh sách Node.js