Trình tạo hash bcrypt
Tạo hash
Cao hơn = chậm hơn & an toàn hơn. 12 là mức mặc định tốt.
Đôi khi bạn có một hash bcrypt từ bản backup cũ và một mật khẩu plaintext, rồi cần biết chúng có khớp không. Hoặc bạn có một mật khẩu và muốn biết hash mà một cost factor nhất định sẽ tạo ra. Công cụ này làm cả hai: nhập mật khẩu để tạo hash mới, dán hash và mật khẩu ứng viên để biết verify có thành công không — dùng cùng kiểu so sánh constant-time như kiểm tra đăng nhập production.
Tạo hoặc verify bcrypt
-
1
Chọn chế độ
Tạo hash mới từ mật khẩu, hoặc verify mật khẩu với hash `$2a$` / `$2b$` / `$2y$` hiện có.
-
2
Với tạo hash: nhập plaintext và cost
Cost 4-14; 10-12 là bình thường. Mỗi hash tạo một salt ngẫu nhiên 16 byte.
-
3
Với verify: dán hash và plaintext
Công cụ trích salt và cost từ hash rồi hash lại plaintext với cùng tham số.
-
4
Đọc kết quả
Chế độ tạo cho chuỗi hash 60 ký tự; chế độ verify trả về khớp màu xanh hoặc không khớp màu đỏ.
Bên trong chế độ verify
Với một hash đã lưu như:
$2b$12$mE2n5YqWjKqT9tXg.OQPoeeHZJ9hdSvOt5wFdRRQwl6yE1vWWY3z6
Trình verify sẽ:
- Phân tích version (
2b), cost (12), salt (22 ký tự đầu sau cost) và digest (31 ký tự cuối). - Chạy lại bcrypt trên plaintext ứng viên với salt và cost đã trích.
- So sánh digest thu được với digest gốc bằng so sánh constant-time.
So sánh thành công trả về true; bất kỳ khác biệt nào trả về false.
So sánh constant-time
So sánh hai chuỗi bằng == ngây thơ sẽ trả về ngay khi một byte khác nhau — đây là timing side channel có thể rò từng chữ số hash nếu lấy đủ mẫu. Kiểm tra mật khẩu production (và công cụ này) dùng so sánh constant-time, luôn kiểm tra mọi byte, nên thời gian quyết định không phụ thuộc vào số byte đầu khớp nhau.
Các ca chẩn đoán thường gặp
| Triệu chứng | Nguyên nhân có thể |
|---|---|
| Xác minh thất bại dù bạn chắc chắn về mật khẩu | Có khoảng trắng thừa hoặc BOM trong đầu vào. Hãy loại bỏ cả hai. |
Xác minh thất bại, phiên bản 2y |
Một số thư viện không thích 2y; nó vẫn hợp lệ và tương thích. Hãy hash lại bằng 2b từ nay về sau. |
| Hash quá ngắn / sai định dạng | Đây không phải hash bcrypt. MD5 có 32 ký tự hex, SHA-1 có 40, bcrypt có 60 với dấu phân cách $. |
| Cảnh báo cost không khớp | Cost đã lưu thấp hơn mức tối thiểu trong chính sách của bạn. Hãy hash lại ở lần đăng nhập thành công kế tiếp. |
Hash lại khi đăng nhập
Cách làm tốt nhất: khi người dùng đăng nhập thành công, hãy kiểm tra hash đã lưu có cost thấp hơn chính sách hiện tại không. Nếu có, hash lại mật khẩu ở cost mới và cập nhật cơ sở dữ liệu. Sau vài tháng bạn nâng cấp toàn bộ người dùng mà không cần yêu cầu ai đổi mật khẩu.
Công cụ này không làm gì
- Xác minh hàng loạt — Được thiết kế để xử lý từng hash một.
- Bẻ khóa hoặc dò tìm vét cạn — Tấn công kiểu từ điển hoặc rainbow-table cố ý nằm ngoài phạm vi.
- Khôi phục mật khẩu gốc — bcrypt là một chiều; nếu bạn quên mật khẩu, cách duy nhất là đặt lại.
Câu hỏi thường gặp
Không. Việc hash và xác minh diễn ra ngay trong trình duyệt của bạn. Cả mật khẩu gốc lẫn hash đều không rời khỏi trang.
Salt được sinh ngẫu nhiên cho từng hash. Đó chính là mục đích — hai người dùng có cùng mật khẩu vẫn nhận hash khác nhau, vô hiệu hóa rainbow tables.
Có, đó chính xác là việc chế độ verify làm: dán hash bạn có, dán mật khẩu ứng viên, công cụ xác nhận hoặc phủ nhận việc khớp.
Có. Tất cả biến thể hiện đại đều tương tác được — digest tương thích giữa các phiên bản; chỉ khác nhau ở tag. Một số hash $2$ cũ từ hệ thống khoảng năm 2000 có thể cần thư viện hỗ trợ rõ ràng cho định dạng cũ.
Công cụ liên quan
Bộ mã hóa mật mã A1Z26
Mã hóa văn bản bằng mật mã A1Z26 (A=1, B=2, ... Z=26) hoặc giải mã chuỗi số về chữ cái, với dấu phân tách tùy chỉnh.
Mã hóa / giải mã AES
Mã hóa và giải mã văn bản rủi ro thấp bằng các cipher AES của OpenSSL. Cụm mật khẩu được băm SHA-256 và đầu ra Base64 gồm IV cộng bản mã.
Bộ mã hóa mật mã Atbash
Mã hóa hoặc giải mã văn bản bằng mật mã Atbash, phép thay thế Hebrew ánh xạ A-Z thành Z-A. Cùng một thao tác dùng để mã hóa và giải mã.
Bộ mã hóa và giải mã Base32
Mã hóa và giải mã chuỗi Base32 bằng bảng chữ cái RFC 4648. Hữu ích cho TOTP secrets, token không phân biệt hoa thường và mã định danh do người nhập.
Bộ mã hóa và giải mã Base85
Mã hóa và giải mã Base85 theo biến thể Adobe Ascii85 (PostScript/PDF) hoặc Z85 (ZeroMQ). Gọn hơn Base64 cho dữ liệu nhị phân.
Trình tạo bcrypt
Tạo hash bcrypt từ mật khẩu plaintext. Tùy chỉnh cost factor từ 4 đến 14, tương thích với Laravel, Django, Node và PHP.