Trình tạo và kiểm tra hash bcrypt
Lập trìnhTrình tạo bcrypt băm một mật khẩu bằng thuật toán bcrypt (salt ngẫu nhiên cộng với hệ số chi phí có thể điều chỉnh) và kiểm tra xem một mật khẩu có khớp với một hash cho trước hay không.
Trang này được dịch với sự hỗ trợ của AI và chưa được chuyên gia rà soát. Hãy kiểm tra các nguồn trích dẫn trước khi dùng cho quyết định quan trọng.
Giới thiệu
bcrypt là một hàm băm mật khẩu từ năm 1999 được xây dựng trên mật mã Blowfish và cố tình chậm để làm tăng chi phí của các cuộc tấn công vét cạn. Mỗi lần +1 vào hệ số chi phí sẽ nhân đôi khối lượng công việc, và mỗi hash nhúng một salt ngẫu nhiên, nên cùng một mật khẩu sẽ tạo ra một hash khác nhau mỗi lần. Công cụ này chạy thư viện bcryptjs bên trong trình duyệt của bạn, nên mật khẩu không bao giờ rời khỏi thiết bị của bạn. Hãy dùng nó để tạo hash cho tài khoản thử nghiệm trong quá trình phát triển hoặc để kiểm tra một hash được lưu trong cơ sở dữ liệu của bạn.
Cách dùng
- 1Ở chế độ tạo, nhập một mật khẩu và chọn chi phí (số vòng) để tạo một hash.
- 2Ở chế độ kiểm tra, nhập mật khẩu và hash bcrypt sẵn có.
- 3Sao chép hash thu được hoặc đọc kết quả khớp.
Tham khảo
| Phần | Ý nghĩa |
|---|---|
| $2b$ | Định danh thuật toán (phiên bản bcrypt hiện tại) |
| 10$ | Chi phí — 2^10 = 1,024 lần lặp |
| 22 ký tự tiếp theo | Salt ngẫu nhiên 128 bit (mã hóa base64) |
| 31 ký tự cuối | Kết quả hash 184 bit (checksum) |
Nguồn và tiêu chuẩn
- A Future-Adaptable Password Scheme (bcrypt) - USENIX
- OWASP Password Storage Cheat Sheet - OWASP
- MDN Web Docs: Client-side web APIs - MDN Web Docs
Câu hỏi thường gặp
Mật khẩu của tôi có được gửi lên máy chủ không?
Không. Thư viện bcryptjs chạy bên trong trình duyệt của bạn, nên cả việc băm lẫn kiểm tra đều là cục bộ — mật khẩu và hash không bao giờ được truyền đi hay lưu lại. Dù vậy, hãy tránh gõ mật khẩu sản xuất trên máy dùng chung hoặc trong khi chia sẻ màn hình.
Tại sao hash lại khác nhau mỗi lần với cùng một mật khẩu?
Vì một salt ngẫu nhiên mới được tạo và nhúng vào mỗi hash. Việc kiểm tra tái sử dụng salt được lưu bên trong chuỗi hash, nên bất kỳ hash nào trong số đó đều so sánh đúng.
Tôi nên dùng chi phí (số vòng) là bao nhiêu?
Thường là 10–12. Mỗi lần tăng lên sẽ nhân đôi thời gian, vậy nên hãy nhắm tới khoảng 100–300ms cho mỗi hash trên phần cứng máy chủ của bạn.
Có giới hạn độ dài mật khẩu không?
bcrypt chỉ dùng 72 byte đầu tiên của đầu vào và âm thầm bỏ qua phần còn lại. Công cụ này cảnh báo khi một mật khẩu vượt quá 72 byte UTF-8.