Công cụ băm mật khẩu Bcrypt là gì?
Công cụ băm mật khẩu Bcrypt là tiện ích tạo chuỗi băm từ một mật khẩu và kiểm tra một mật khẩu có phù hợp với chuỗi băm đã có hay không. Trong bối cảnh lưu trữ mật khẩu, bcrypt là thuật toán băm được thiết kế để việc tính toán có chi phí điều chỉnh được. Mục đích là hỗ trợ xác minh mật khẩu mà không cần lưu bản gốc dưới dạng văn bản có thể đọc trực tiếp.
Giao diện được cung cấp có hai chức năng riêng biệt. Luồng tạo nhận mật khẩu cùng tham số cost, yêu cầu thư viện tạo salt rồi băm. Luồng kiểm tra nhận mật khẩu ứng viên cùng chuỗi bcrypt, sau đó hiển thị phản hồi khớp, không khớp hoặc lỗi từ thư viện. Kết quả tạo là chuỗi băm, không phải một mật khẩu mới do công cụ đề xuất.
Dù một số nhãn trên giao diện dùng từ “Encrypt”, cách hiểu chính xác ở đây là băm mật khẩu, không phải mã hóa có thể giải mã. Công cụ không có chức năng chuyển chuỗi bcrypt trở lại mật khẩu ban đầu.
Phần mã được cung cấp xác nhận cách tiếp nhận dữ liệu, gọi thư viện và trình bày kết quả. Nội dung triển khai bên trong thư viện ngoài chưa được cung cấp, nên không thể từ đó kết luận toàn bộ thuật toán đã được kiểm chứng, mọi hệ thống đều tương thích hoặc toàn bộ trang có bảo đảm riêng tư nhất định.
Năm thuật ngữ cần hiểu khi sử dụng bcrypt
Băm mật khẩu
Băm mật khẩu là biến mật khẩu thành một giá trị phục vụ việc kiểm tra về sau. Trong cách sử dụng thông thường, hệ thống lưu chuỗi băm thay vì lưu mật khẩu gốc, rồi xác minh mật khẩu người dùng nhập khi đăng nhập. Băm khác với mã hóa có khóa giải mã: không có thao tác đọc ngược bản gốc từ kết quả. Tuy vậy, băm không làm mật khẩu yếu trở nên mạnh; một mật khẩu dễ đoán vẫn có thể bị thử đoán.
Salt
Salt là dữ liệu bổ sung được dùng cùng mật khẩu trong quá trình băm. Theo nguyên lý bcrypt, salt khác nhau giúp những mật khẩu giống nhau có thể tạo ra chuỗi băm khác nhau. Salt không phải mật khẩu thứ hai và không phải khóa dùng để giải mã. Công cụ yêu cầu thư viện tạo salt trước khi băm, thay vì nhận salt do người dùng nhập. Cách thư viện lấy dữ liệu ngẫu nhiên và các bảo đảm của nguồn đó chưa được xác minh từ mã hiện có.
Cost / work factor
Cost, hay work factor, là tham số điều chỉnh lượng công việc tính toán của bcrypt. Cost cao hơn thường khiến việc tạo và kiểm tra chuỗi băm tốn nhiều tài nguyên hơn, qua đó tăng chi phí của việc thử mật khẩu. Đây không phải số giây chờ, số ký tự của mật khẩu hay điểm đánh giá độ mạnh. Ví dụ, cost 10 là một mức công việc không có đơn vị thời gian; không thể diễn giải thành xử lý trong 10 giây.
Chuỗi băm bcrypt
Chuỗi băm bcrypt là kết quả dạng văn bản dùng để lưu trữ và xác minh. Theo định dạng bcrypt thông dụng, chuỗi này chứa thông tin phiên bản, cost, salt và phần băm. Vì salt đã nằm trong chuỗi, thông thường không cần tách nó thành một cột riêng để xác minh. Chuỗi này không phải văn bản được chuyển sang một kiểu biểu diễn để đọc lại. Tiền tố thực tế mà công cụ tạo ra vẫn phụ thuộc thư viện và chưa được xác minh ở đây.
Xác minh mật khẩu
Xác minh mật khẩu là kiểm tra xem một mật khẩu ứng viên có phù hợp với chuỗi băm đã lưu hay không. Công cụ gửi hai dữ liệu đó đến chức năng so sánh của thư viện và trình bày phản hồi. Kết quả không trả lại mật khẩu ban đầu, không chấm điểm độ mạnh và không xác minh chữ ký số. Nếu thấy thông báo khớp, người dùng chỉ nên hiểu rằng phép kiểm tra với chuỗi băm đã nhập trả về kết quả đúng, không phải danh tính người nhập đã được chứng minh.
Đầu vào và kết quả của công cụ có ý nghĩa gì?
Dữ liệu cho từng luồng
Luồng tạo cần mật khẩu dạng chuỗi văn bản và cost dạng số, không có đơn vị. Giá trị cost mặc định trên giao diện là 10. Phần giao diện được cung cấp từ chối mật khẩu rỗng, nhưng không có phép kiểm tra độ mạnh hoặc giới hạn độ dài mật khẩu. Việc không có giới hạn tại giao diện không chứng minh thư viện xử lý mọi độ dài theo cách người dùng mong đợi.
Luồng kiểm tra cần một mật khẩu ứng viên và một chuỗi băm bcrypt. Mật khẩu được giữ nguyên, bao gồm khoảng trắng đầu và cuối. Riêng chuỗi băm được bỏ khoảng trắng ở hai đầu trước khi kiểm tra dữ liệu thiếu. Vì vậy, ô mã băm chỉ chứa dấu cách sẽ được coi là trống; mật khẩu chỉ chứa dấu cách không bị coi là chuỗi rỗng bởi phép kiểm tra này.
Cách đọc kết quả
Khi tạo thành công, vùng kết quả hiển thị nguyên chuỗi băm mà thư viện trả về. Đây là dữ liệu cần giữ đầy đủ nếu sử dụng cho một hệ thống tương thích. Công cụ có chức năng sao chép qua clipboard của trình duyệt; không có bằng chứng về tải tệp, xuất định dạng khác hoặc xử lý danh sách mật khẩu.
- TRÙNG KHỚP! (MATCHED): thư viện trả về kết quả đúng cho cặp mật khẩu và chuỗi băm.
- SAI MẬT KHẨU! (NOT MATCH): thư viện không báo lỗi nhưng kết quả so sánh không phải giá trị đúng.
- Mã Hash không hợp lệ!: lời gọi so sánh nhận lỗi từ thư viện.
Thông báo cuối là cách giao diện trình bày nhánh lỗi, chưa đủ để khẳng định mọi nguyên nhân đều là sai định dạng. Công cụ còn có các thông báo riêng khi thiếu dữ liệu, không tải được thư viện, tạo salt thất bại, băm thất bại hoặc không sao chép được.
Công cụ tạo và kiểm tra mã băm theo quy tắc nào?
Luồng tạo salt và băm
Công cụ kiểm tra mật khẩu rỗng trước khi bắt đầu tạo. Nếu có dữ liệu, nó xóa kết quả cũ, chuyển nút sang trạng thái chờ và yêu cầu thư viện tạo salt. Chỉ khi bước này thành công, mật khẩu cùng salt mới được gửi tiếp để băm. Lỗi tạo salt kết thúc lượt xử lý; nếu băm thành công, chuỗi trả về được đưa vào vùng kết quả.
Trong lúc thực hiện, nút tạo tạm bị vô hiệu hóa. Có khoảng chờ 50 mili giây trước lời gọi thư viện để giao diện có cơ hội cập nhật. Đây là khoảng chờ phục vụ hiển thị, không phải thời gian hoàn thành bcrypt và không bảo đảm máy sẽ không chậm.
Cost và chi phí tính toán
Giá trị cost được đọc bằng phép chuyển sang số nguyên, không phải làm tròn đến số nguyên gần nhất. Nếu giá trị đọc không dùng được hoặc bằng 0, luồng tạo dùng 10. Giao diện khai báo phạm vi 4–14, nhưng cần phân biệt phạm vi hiển thị với kiểm tra đầu vào được cưỡng chế đầy đủ.
Khi nhập ô số, giá trị đã giới hạn về 4–14 chỉ được dùng để cập nhật thanh trượt, không được ghi lại vào ô số. Luồng tạo vẫn đọc từ ô số, nên không thể nói mọi giá trị ngoài phạm vi đều bị chặn. Cách thư viện xử lý các giá trị đó chưa được xác minh.
Theo kiến thức nền, lượng công việc bcrypt gắn với 2^cost. Tăng cost một đơn vị thường làm lượng công việc tăng xấp xỉ gấp đôi. Quan hệ này không phải phép đo thời gian của công cụ trên một thiết bị cụ thể.
Luồng xác minh và tự điền dữ liệu
Sau khi tạo thành công, công cụ chỉ tự điền mật khẩu và chuỗi băm sang khu vực kiểm tra khi cả hai ô đều trống. Có nội dung ở một ô cũng ngăn việc tự điền; chức năng này không tự chạy xác minh.
Luồng xác minh kiểm tra dữ liệu thiếu sau khi bỏ khoảng trắng hai đầu chuỗi băm, rồi chuyển sang trạng thái chờ. Khi thư viện phản hồi, lỗi được xét trước; nếu không có lỗi, công cụ phân biệt kết quả đúng với kết quả không khớp và khôi phục nút kiểm tra.
Có thể dùng công cụ bcrypt trong những tình huống nào?
Học và thử nghiệm bằng dữ liệu giả định
Công cụ phù hợp để quan sát mối liên hệ giữa mật khẩu, cost, chuỗi băm và kết quả xác minh bằng dữ liệu giả định. Chẳng hạn, bạn có thể dùng một mật khẩu chỉ phục vụ bài tập để tìm hiểu sự khác nhau giữa tạo kết quả mới và kiểm tra kết quả đã có. Không cần đưa mật khẩu tài khoản đang sử dụng vào quá trình học này.
Tạo mật khẩu, đánh giá độ mạnh và băm mật khẩu là ba nhu cầu khác nhau. Công cụ hiện tại không sinh mật khẩu mới hoặc chấm điểm mật khẩu đã nhập. Nếu cần tìm hiểu nhu cầu đánh giá độ mạnh, bạn có thể tham khảo trình kiểm tra độ mạnh mật khẩu; không nên coi đó là một bước tự động tích hợp với công cụ bcrypt này.
Tạo dữ liệu thử và kiểm tra mật khẩu ứng viên
Một tình huống sử dụng khác là chuẩn bị chuỗi băm cho dữ liệu thử nghiệm trong môi trường bạn quản lý. Điều kiện quan trọng là hệ thống đích hỗ trợ định dạng đó và khả năng tương thích đã được kiểm tra. Có chuỗi kết quả không đồng nghĩa có thể đưa ngay vào mọi cơ sở dữ liệu hoặc hệ thống đăng nhập.
Bạn cũng có thể kiểm tra một mật khẩu ứng viên với chuỗi băm mà mình có quyền sử dụng. Phép kiểm tra này trả lời một câu hỏi cụ thể về cặp dữ liệu, không phải tính năng dò mật khẩu hoặc lấy lại mật khẩu bị quên. Khi hỗ trợ người khác, nên ưu tiên dữ liệu thử thay cho thông tin đăng nhập thật.
Băm bcrypt khác mã hóa và so sánh chuỗi như thế nào?
Băm, mã hóa và mã hóa biểu diễn
Băm tạo giá trị phục vụ kiểm tra mà không cung cấp cơ chế giải mã để đọc lại bản gốc. Mã hóa bảo vệ dữ liệu bằng một cơ chế có thể giải mã khi có thông tin cần thiết, chẳng hạn khóa thích hợp. Mã hóa biểu diễn, hay encode, chủ yếu đổi cách biểu diễn dữ liệu; bản thân thao tác đó không bảo đảm tính bí mật.
Vì vậy, yêu cầu “bcrypt sang text” cần được hiểu lại: chuỗi bcrypt vốn đã là văn bản, nhưng không chứa một bản mật khẩu có thể decode để đọc ra. Băm dành cho mật khẩu còn có mục tiêu tăng chi phí thử đoán, khác với nhiều nhu cầu băm văn bản nói chung như kiểm tra dữ liệu. Không nên xem mọi thuật toán băm là lựa chọn thay thế tương đương cho lưu mật khẩu.
Xác minh bcrypt và so sánh chuỗi trực tiếp
Theo nguyên lý bcrypt, cùng một mật khẩu nhưng dùng salt khác nhau có thể tạo ra những chuỗi khác nhau. Do đó, tạo một chuỗi băm mới rồi so sánh văn bản với chuỗi cũ không phải cách kiểm tra mật khẩu phù hợp. Hai chuỗi không giống nhau chưa chứng minh hai mật khẩu khác nhau.
Xác minh bcrypt dùng chuỗi băm đã có cùng mật khẩu ứng viên để kiểm tra sự phù hợp. Công cụ giao việc này cho thư viện, không giải mã mật khẩu. Kết quả khớp cũng không cho biết mật khẩu khó đoán đến đâu hoặc người nhập có phải chủ tài khoản hay không; hệ thống thật vẫn cần những cơ chế kiểm soát truy cập và bảo vệ khác.
Ví dụ đọc kết quả và xử lý dữ liệu khi dùng bcrypt
Tạo kết quả với dữ liệu giả định
Giả sử mật khẩu dùng riêng cho bài tập là Demo-Only!2026, cost là 10 và cả hai ô trong khu vực kiểm tra đều trống. Mật khẩu là chuỗi văn bản; cost 10 không có đơn vị. Vì mật khẩu không rỗng, công cụ có thể bắt đầu yêu cầu tạo salt rồi băm.
Nếu thư viện trả về thành công, chuỗi băm xuất hiện trong vùng kết quả, đồng thời mật khẩu giả định và chuỗi đó được điền sang khu vực kiểm tra. Không có một chuỗi bcrypt cụ thể nào được dự đoán trong ví dụ này: kết quả thực tế phụ thuộc thư viện và salt. Việc tự điền cũng chưa tạo ra thông báo khớp, vì lượt xác minh chưa được tự động chạy.
Dữ liệu trống và khoảng trắng
Ở tình huống thứ hai, giữ cost hiển thị là 10 nhưng để mật khẩu tạo hoàn toàn trống. Công cụ sẽ yêu cầu nhập mật khẩu trước khi gọi thư viện. Cost hợp lệ trên giao diện không thay thế được dữ liệu mật khẩu còn thiếu; không có lượt tạo mới được bắt đầu trong tình huống này.
Ở tình huống thứ ba, nhập mật khẩu ứng viên Demo-Only!2026 nhưng ô mã băm chỉ chứa ba dấu cách. Sau khi bỏ khoảng trắng hai đầu, mã băm trở thành chuỗi rỗng. Công cụ yêu cầu nhập đủ dữ liệu và không gọi phép so sánh. Đây là thông báo thiếu đầu vào, không phải kết luận mật khẩu sai hoặc một chuỗi bcrypt đã bị hỏng.
Khi khu vực kiểm tra đã có nội dung
Giả sử khu vực kiểm tra đã có một mật khẩu thử, còn ô mã băm vẫn trống. Bạn tạo chuỗi băm mới bằng dữ liệu khác. Nếu lượt tạo thành công, vùng kết quả vẫn nhận chuỗi mới, nhưng khu vực kiểm tra không tự được điền thêm.
Lý do là điều kiện tự điền yêu cầu đồng thời cả hai ô đều trống. Cách này tránh tự ghi đè nội dung đã có, nhưng cũng có nghĩa mật khẩu đang nằm ở khu vực kiểm tra không nhất thiết tương ứng với kết quả vừa tạo. Trước khi đọc một kết quả xác minh, cần xác định đúng cặp mật khẩu và chuỗi băm đang được sử dụng.
Giới hạn và lưu ý trước khi dùng mật khẩu thật
Dữ liệu nhạy cảm và môi trường sử dụng
Ô mật khẩu trong giao diện là ô văn bản hiển thị ký tự, không phải ô che mật khẩu. Điều này đáng lưu ý khi chia sẻ màn hình, ghi hình hoặc dùng máy chung. Chức năng tự điền còn có thể đưa mật khẩu sang khu vực kiểm tra, nên dữ liệu nhạy cảm có thể xuất hiện ở cả hai nơi.
Không thể khẳng định mật khẩu luôn chỉ được xử lý cục bộ, không truyền đi hoặc không lưu lại chỉ từ đoạn mã giao diện. Toàn bộ trang và các thành phần phụ thuộc chưa được xem xét đầy đủ. Thư viện ngoài phải tải thành công để chức năng hoạt động; sao chép cũng phụ thuộc khả năng và quyền clipboard của môi trường trình duyệt.
Những hành vi chưa được xác minh
Các điểm chưa xác minh gồm nguồn ngẫu nhiên tạo salt, tiền tố bcrypt thực tế, xử lý Unicode, giới hạn theo byte đối với mật khẩu dài và khả năng tương thích với hệ thống đích. Không có giới hạn độ dài ở giao diện không đồng nghĩa mọi ký tự trong mật khẩu dài đều được thư viện xử lý đầy đủ.
Gợi ý cost 10–12 trên giao diện không phải chứng nhận an toàn hoặc chuẩn phù hợp cho mọi hệ thống hiện tại. Triển khai thật cần đánh giá hiệu năng và yêu cầu riêng. Công cụ cũng không có giải mã, nhập salt tùy chỉnh hoặc chọn tiền tố phiên bản, nên không nên dùng nó để đáp ứng những nhu cầu đó.
Câu hỏi thường gặp
Có thể giải mã chuỗi bcrypt để lấy lại mật khẩu không?
Không, công cụ không có chức năng giải mã bcrypt thành mật khẩu gốc. Bcrypt là băm mật khẩu, không phải mã hóa có một khóa để đảo ngược kết quả. Luồng kiểm tra chỉ nhận mật khẩu ứng viên và chuỗi băm rồi yêu cầu thư viện so sánh. Thử đoán một mật khẩu rồi kiểm tra không phải giải mã. Nếu quên mật khẩu tài khoản, nên sử dụng cơ chế đặt lại mật khẩu của hệ thống thay vì mong chuỗi băm trả lại bản gốc.
Vì sao cùng một mật khẩu có thể tạo ra hai chuỗi bcrypt khác nhau?
Theo nguyên lý bcrypt, salt khác nhau có thể làm cùng một mật khẩu tạo ra các chuỗi băm khác nhau. Công cụ yêu cầu thư viện tạo salt cho mỗi lượt tạo, nhưng nguồn ngẫu nhiên và kết quả thực tế của thư viện chưa được xác minh ở đây. Vì vậy, không nên yêu cầu hai chuỗi phải giống nhau để kết luận mật khẩu đúng. Cách phù hợp là kiểm tra mật khẩu ứng viên với từng chuỗi bằng chức năng xác minh, không chỉ so sánh hai văn bản kết quả.
Có nên luôn chọn cost 14 thay vì 10 không?
Không nên luôn chọn 14 chỉ vì đó là mức cao nhất trên thanh trượt. Cost cao hơn làm lượng công việc tăng, ảnh hưởng cả việc tạo lẫn kiểm tra mật khẩu. Mức phù hợp phụ thuộc thiết bị, tải sử dụng và yêu cầu của hệ thống. Giá trị mặc định 10 và gợi ý 10–12 là thông tin của giao diện, không phải bảo đảm an toàn. Công cụ không cung cấp phép đo hiệu năng để kết luận một mức cụ thể tối ưu cho mọi trường hợp.
Khoảng trắng trong mật khẩu và mã băm có bị bỏ đi không?
Mật khẩu không bị bỏ khoảng trắng đầu hoặc cuối ở cả luồng tạo và luồng kiểm tra. Ngược lại, chuỗi băm dùng để kiểm tra được bỏ khoảng trắng ở hai đầu trước khi gọi thư viện. Do đó, vô tình thêm dấu cách vào mật khẩu có thể làm đầu vào khác với dự định. Một ô mã băm chỉ có dấu cách sẽ bị coi là thiếu dữ liệu. Quy tắc này không có nghĩa công cụ tự loại bỏ mọi khoảng trắng bên trong chuỗi băm.
Công cụ có cho nhập salt riêng không?
Không, giao diện được cung cấp không có ô nhập salt thủ công. Luồng tạo yêu cầu thư viện tạo salt trước rồi dùng salt đó cùng mật khẩu để băm. Theo định dạng bcrypt thông dụng, thông tin salt nằm trong chuỗi kết quả, nên việc xác minh thường không cần nhập nó riêng. Tuy nhiên, điều này không chứng minh chất lượng nguồn ngẫu nhiên của thư viện. Nếu mục tiêu thử nghiệm yêu cầu kiểm soát salt, chức năng hiện có không đáp ứng yêu cầu ấy.
Chuỗi băm tạo ở đây có dùng được với Laravel hoặc các tiền tố 2b, 2y không?
Chưa thể khẳng định tương thích với Laravel hoặc từng tiền tố 2b, 2y từ mã được cung cấp. Giao diện không cho chọn tiền tố, còn nội dung thư viện và kết quả tạo thực tế chưa được xác minh. Một hệ thống hỗ trợ bcrypt nói chung vẫn cần kiểm tra định dạng và cách xử lý của phiên bản đang dùng. Nên kiểm tra bằng dữ liệu giả định trong môi trường thử nghiệm của hệ thống đích trước khi sử dụng chuỗi băm cho dữ liệu thật.
Có nên nhập mật khẩu tài khoản thật vào công cụ không?
Nên ưu tiên mật khẩu giả định, đặc biệt khi chỉ học hoặc thử tính năng. Mật khẩu được hiển thị rõ trên giao diện, và đoạn mã hiện có không đủ chứng minh toàn bộ trang không truyền hoặc lưu dữ liệu. Việc gọi thư viện trong trình duyệt cũng không tự tạo ra bảo đảm riêng tư cho mọi thành phần của trang. Với tài khoản thật, hãy dùng quy trình của hệ thống đáng tin cậy; không cần chia sẻ mật khẩu đang sử dụng để minh họa cách bcrypt hoạt động.


16 bình luận
Trần Ngọc Phương
ETA calculator hữu ích phết, nhưng nếu danh sách công cụ tương tự chia theo nhóm thì sẽ dễ tìm hơn.
Lê Ngọc Thủy
Có thể thêm giải thích ngắn về salt và cost được không? Người mới như mình chưa hiểu hai cái này ảnh hưởng thế nào.
Phan Hoài Anh
minh dan ma bcrypt vao verify ma bao khong hop le, co phai do copy du khoang trang khong a?
Ngô Gia Hiếu
Verify nên báo rõ hơn khi mã băm sai định dạng và khi mật khẩu không khớp, hai trường hợp này dễ bị nhầm.
Đặng Đức Châu
Lạc vào đây để băm mật khẩu, cuối cùng lại ngồi nghịch trình chọn Emoji cả buổi 😅
Hồ Bảo Khánh
Mong có nút sao chép mã Bcrypt kèm thông báo đã copy, đỡ phải chọn cả chuỗi bằng tay.
Võ Hữu Quyên
Website có gửi mật khẩu mình nhập lên máy chủ không, hay xử lý ngay trong trình duyệt vậy? Muốn biết rõ trước khi dùng.
Dương Hải Sơn
Tool xịn nha, tạo hash rồi thử Verify với mật khẩu sai để kiểm tra cũng khá tiện 😀
Phan Ngọc Sơn
giao dien tren dien thoai de dung, nhung o nhap ma hash hoi dai, keo qua keo lai hoi met.
Đỗ Thị Hoàng
Nếu có thông báo nhắc chỉ nên nhập mật khẩu thử nghiệm, không dùng mật khẩu thật của tài khoản thì sẽ yên tâm hơn.
Lê Thu Hà
Tạo mã ổn nhưng lúc chờ xử lý mình hơi bối rối. Có biểu tượng đang chạy thì dễ biết công cụ chưa bị đứng hơn.
Vũ Thu Vy
Mong có nút hiện/ẩn mật khẩu để mình kiểm tra xem có gõ nhầm trước khi tạo mã không.
Đặng Thị Hoàng
bam mat khau xong copy qua project la dung dc luon hay can cau hinh gi nua vay moi nguoi?
Đặng Văn Thành
Giao diện gọn gàng, không phải mò nhiều. Phần Verify đúng cái mình đang cần để test chức năng đăng nhập.
Vũ Tuấn Nam
Cho mình hỏi cùng một mật khẩu mà bấm Encrypt hai lần lại ra hai mã khác nhau thì có bình thường không ạ?
Huỳnh Tiến Vinh
Mình vừa thử tạo mã Bcrypt cho mật khẩu mẫu, thao tác khá nhanh và dễ hiểu. Có luôn phần kiểm tra nên tiện ghê.