DevToolPal
VI

Tạo và kiểm tra hash bcrypt

Băm mật khẩu bằng bcrypt với mức chi phí bạn chọn, hoặc kiểm tra mật khẩu có khớp với một hash bcrypt hay không.

Chạy cục bộ, không bao giờ tải lên

Tùy chọn

Chế độ

Mật khẩu

Kết quả

Kết quả sẽ hiện ở đây

Công cụ làm gì

bcrypt là hàm băm mật khẩu được thiết kế để chạy chậm. Khác với MD5 hay SHA-256 có thể tính hàng tỷ lần mỗi giây, bcrypt có mức chi phí điều chỉnh được, khiến mỗi lần đoán trở nên tốn kém với kẻ tấn công đánh cắp cơ sở dữ liệu. Cùng với Argon2 và scrypt, đây vẫn là một trong những lựa chọn phổ biến nhất để lưu mật khẩu.

Công cụ này làm hai việc:

  • Tạo hash: biến mật khẩu thành hash bcrypt với mức chi phí và tiền tố phiên bản bạn chọn.
  • Kiểm tra: xác định mật khẩu có khớp với một hash bcrypt sẵn có hay không, ví dụ từ cơ sở dữ liệu hoặc tệp seed của framework.

Cách sử dụng

  1. Nhập Mật khẩu, hoặc bấm Ví dụ.
  2. Ở chế độ Tạo hash, chọn Chi phí và Phiên bản. Hash hiện ngay; bấm Salt mới để có hash khác.
  3. Ở chế độ Kiểm tra, dán Hash bcrypt cần kiểm tra. Kết quả cho biết mật khẩu có khớp không.

Đọc một hash bcrypt

Một hash như $2b$10$./3kakECWB0QfIgYzIqciuv449HNnwGbgExtJQQwQ1MofonthOdoK gồm bốn phần: phiên bản 2b, chi phí 10 (2¹⁰ vòng thiết lập khóa), salt 22 ký tự và checksum 31 ký tự. Mọi thứ máy chủ cần để kiểm tra mật khẩu sau này đều nằm trong chuỗi này, nên bạn chỉ cần lưu hash.

Giới hạn cần biết

bcrypt chỉ đọc 72 byte đầu tiên của mật khẩu. Mật khẩu dài hơn, hoặc có nhiều ký tự ngoài ASCII (mỗi ký tự chiếm 2–4 byte trong UTF-8), sẽ bị cắt mà không báo. Công cụ sẽ cảnh báo khi điều đó xảy ra. Nếu cần chấp nhận cụm mật khẩu rất dài, hãy băm trước hoặc cân nhắc Argon2id.

Câu hỏi thường gặp

› Vì sao cùng một mật khẩu mà mỗi lần lại ra hash khác nhau?

Mỗi hash dùng một salt ngẫu nhiên 16 byte mới, được lưu ngay trong hash. Đây là thiết kế có chủ đích để các mật khẩu giống nhau không cho ra hash giống nhau. Để kiểm tra mật khẩu, hãy dùng chế độ Kiểm tra thay vì so sánh chuỗi hash.

› Nên chọn chi phí bao nhiêu?

Chọn mức chi phí cao nhất mà máy chủ chịu được cho mỗi lần đăng nhập, hiện nay thường là 10 đến 12. Mỗi bậc làm khối lượng công việc tăng gấp đôi. Hãy đo trên phần cứng thật; khoảng 100–300 ms mỗi hash là mục tiêu phổ biến.

› $2a$, $2b$ và $2y$ khác nhau thế nào?

Cùng một thuật toán. $2b$ là tiền tố hiện tại của OpenBSD, $2y$ là tiền tố mà password_hash của PHP ghi ra, còn $2a$ là bản cũ. Hầu hết thư viện chấp nhận cả ba, nên hãy chọn loại hệ thống của bạn cần.

› Mật khẩu của tôi có bị gửi đi đâu không?

Không. Việc băm và kiểm tra chạy trong trình duyệt. Mật khẩu và hash cần kiểm tra chỉ nằm trong bộ nhớ của trang này; không được lưu và không được đưa vào liên kết chia sẻ.