Trình Tạo Mã Hóa Bcrypt Generator – Mã Hóa Mật Khẩu An Toàn

Decorative Pattern
Tool Tạo Mã Hóa Bcrypt Generator
Mã Hóa Mật Khẩu An Toàn

Đánh giá công cụ này

(4.1 ⭐ / 365 lượt đánh giá)

Bad (1/5)
So-so (2/5)
Ok (3/5)
Good (4/5)
Great (5/5)

Mã hóa bcrypt là gì?

bcrypt là một hàm băm mật khẩu (hashing) được thiết kế đặc biệt để bảo vệ thông tin đăng nhập của người dùng khỏi các cuộc tấn công dò mật khẩu (brute-force) ngoại tuyến. Được tạo ra vào năm 1999 bởi Niels Provos và David Mazières, thuật toán này dựa trên cơ chế mã hóa Blowfish. Khác với các thuật toán băm thông thường luôn ưu tiên tốc độ, bcrypt cố tình yêu cầu một lượng sức mạnh tính toán lớn để chạy. Sự chậm trễ có chủ đích này biến nó thành một tiêu chuẩn trong ngành để bảo mật mật khẩu cho các ứng dụng web và cơ sở dữ liệu.

Triết lý cốt lõi đằng sau thuật toán này là khả năng thích ứng. Phần cứng máy tính ngày càng nhanh hơn qua mỗi năm, điều này thường làm cho các phương pháp mã hóa cũ dễ bị bẻ khóa bởi các kỹ thuật mới. Để chống lại điều đó, bcrypt giới thiệu một cơ chế gọi là “hệ số công việc” (work factor) có thể tùy chỉnh. Cơ chế này cho phép các lập trình viên tăng chi phí tính toán khi tạo mã băm song song với sự phát triển của phần cứng. Nhờ vậy, một mật khẩu được bảo vệ bởi thuật toán này vẫn luôn an toàn trước các card đồ họa (GPU) hoặc chip chuyên dụng (ASIC) siêu mạnh mà hacker thường sử dụng.

Trong lập trình phần mềm hiện đại, công cụ tạo mã băm bcrypt (bcrypt generator) là một trợ thủ đắc lực. Lập trình viên thường dùng các công cụ này để tạo mã hash an toàn theo cách thủ công, kiểm tra cách thuật toán hoạt động, hoặc tạo sẵn tài khoản quản trị viên trong database (cơ sở dữ liệu) khi mới thiết lập ứng dụng.

Thuật toán bcrypt hoạt động như thế nào?

bcrypt hoạt động bằng cách lấy một mật khẩu dạng thô (plaintext), tạo ra một chuỗi ngẫu nhiên gọi là “salt” (muối) an toàn về mặt mật mã học, và áp dụng thuật toán mã hóa Blowfish nhiều lần dựa trên hệ số công việc đã được chỉ định. Thuật toán sử dụng một giai đoạn thiết lập khóa sửa đổi gọi là Eksblowfish (Expensive Key Schedule Blowfish). Giai đoạn này đảm bảo việc khởi tạo mã hóa diễn ra cực kỳ chậm và tốn rất nhiều bộ nhớ.

Khi bạn nhập mật khẩu, thuật toán trước tiên sẽ tạo ra một chuỗi salt 128-bit. Chuỗi salt này là các ký tự ngẫu nhiên và hoàn toàn duy nhất cho mỗi lần băm mật khẩu đó. Tiếp theo, thuật toán kết hợp mật khẩu gốc và chuỗi salt lại với nhau. Sau đó, nó dùng hệ số công việc để quyết định số lần lặp lại chu kỳ khóa Eksblowfish. Hệ số công việc hoạt động theo thang logarit. Ví dụ, hệ số là 10 có nghĩa là quá trình này sẽ lặp lại 2 mũ 10 lần, tức là 1.024 vòng lặp.

Kết quả cuối cùng là một chuỗi ký tự tiêu chuẩn chứa toàn bộ thông tin cần thiết để xác thực mật khẩu sau này. Chuỗi này bao gồm phiên bản thuật toán, hệ số công việc đã dùng, chuỗi salt được tạo ra và phần mã băm mật khẩu thực sự. Vì salt và hệ số công việc đã được nhúng trực tiếp vào chuỗi cuối cùng, database chỉ cần đúng một cột duy nhất để lưu trữ toàn bộ thông tin đăng nhập một cách an toàn.

Salt (muối) trong băm mật khẩu là gì?

Salt là một chuỗi ký tự ngẫu nhiên được thêm vào mật khẩu gốc trước khi bắt đầu quá trình băm. Mục đích chính của việc thêm salt là để đảm bảo rằng hai mật khẩu giống hệt nhau sẽ không bao giờ tạo ra cùng một chuỗi hash đầu ra. Nếu hai người dùng cùng đặt mật khẩu là password123, thuật toán sẽ tạo ra một chuỗi salt ngẫu nhiên khác biệt cho mỗi người. Kết quả là, mã hash lưu trong database của họ sẽ trông hoàn toàn khác nhau.

Kỹ thuật thêm salt giúp ngăn chặn hacker sử dụng các bảng mã băm được tính toán từ trước, thường gọi là bảng cầu vồng (rainbow tables). Bảng cầu vồng chứa hàng triệu mật khẩu phổ biến đã được băm sẵn. Nếu một database bị đánh cắp mà không dùng salt, kẻ tấn công chỉ cần đối chiếu các mã hash ăn cắp được với bảng cầu vồng để tra ngược ra mật khẩu gốc ngay lập tức. Nhưng vì bcrypt tạo ra một chuỗi salt 128-bit độc nhất cho mỗi mục nhập, các bảng cầu vồng trở nên hoàn toàn vô dụng. Hacker sẽ phải tính toán lại một bảng cầu vồng mới cho từng người dùng, một việc làm bất khả thi về mặt toán học lẫn tài chính.

Tại sao Hệ số công việc (Work Factor) lại quan trọng?

Hệ số công việc xác định số vòng lặp tính toán mà thuật toán bcrypt phải thực hiện để cho ra mã hash cuối cùng. Thuộc tính này kiểm soát tốc độ của quá trình băm. Bằng cách điều chỉnh hệ số này, quản trị viên có thể làm cho thuật toán chậm hơn và tốn tài nguyên hơn. Đây là một cơ chế phòng thủ cốt lõi chống lại các cuộc tấn công brute-force, nơi hacker cố gắng thử hàng triệu tổ hợp mật khẩu mỗi giây.

Nếu hacker đánh cắp được database, chúng sẽ cố đoán mật khẩu bằng cách băm các từ khóa dự đoán rồi so sánh với dữ liệu ăn cắp. Nếu quá trình băm mất 100 mili-giây cho mỗi lần thử do hệ số công việc cao, việc kiểm tra chỉ một triệu mật khẩu cũng đã ngốn mất khoảng 27 giờ. Độ trễ này khiến cho các hoạt động bẻ khóa quy mô lớn trở nên không thể thực hiện được thực tế. Hệ số công việc giúp bcrypt không bị lỗi thời, vì lập trình viên chỉ cần tăng con số này lên khi máy tính trở nên mạnh hơn theo thời gian.

Cách đọc định dạng của một chuỗi bcrypt Hash?

Một chuỗi hash bcrypt tiêu chuẩn dài 60 ký tự, được chia thành bốn phần riêng biệt cách nhau bởi dấu đô-la ($). Việc hiểu rõ định dạng này rất quan trọng đối với lập trình viên khi cần gỡ lỗi (debug) các vấn đề về đăng nhập. Một chuỗi hoàn chỉnh thường trông như thế này: $2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy.

Phần đầu tiên, $2a$, đại diện cho định danh và phiên bản của thuật toán. Chữ 2a chỉ ra đây là một phiên bản bảo mật cao đã khắc phục các lỗ hổng mật mã từ thời kỳ đầu. Bạn cũng có thể bắt gặp các phiên bản khác như $2b$ hoặc $2y$, chúng hoạt động tương tự nhưng đại diện cho các thư viện mã hóa khác nhau.

Phần thứ hai, $10$, đại diện cho hệ số công việc hay còn gọi là chi phí (cost). Trong ví dụ này, chi phí là 10, nghĩa là thuật toán đã chạy 2^10 (1.024) vòng lặp. Nếu bạn cần mức độ bảo mật cao hơn, con số này có thể tăng lên đến 31, đòi hỏi một khoảng thời gian xử lý khổng lồ.

Phần còn lại của chuỗi được chia làm hai phần dính liền nhau. 22 ký tự đầu tiên là chuỗi salt ngẫu nhiên, được mã hóa dưới dạng Base64. 31 ký tự cuối cùng là mã băm thực sự, cũng được mã hóa Base64. Vì tất cả các thành phần này được gộp chung vào một chuỗi duy nhất, các hệ thống xác thực có thể dễ dàng tách chuỗi, lấy ra thông tin salt và chi phí, sau đó tiến hành băm thử đăng nhập của người dùng để xem có khớp với mã lưu trong database hay không.

Tại sao Lập trình viên nên dùng bcrypt thay vì các thuật toán cũ?

Lập trình viên nên sử dụng bcrypt vì nó được cố tình làm cho chậm chạp và phức tạp về mặt toán học, khiến cho các cuộc tấn công dò mật khẩu trở nên quá tốn kém và bất khả thi. Trước đây, các dev hay dùng các hàm băm đa dụng để bảo vệ mật khẩu. Tuy nhiên, các hàm cũ đó được thiết kế để tối đa hóa hiệu suất và tốc độ, hoàn toàn trái ngược với những gì bạn cần cho việc bảo mật mật khẩu.

Ví dụ, việc sử dụng công cụ tạo mã MD5 diễn ra cực kỳ nhanh. MD5 vốn được tạo ra để kiểm tra tính toàn vẹn của file (checksum) một cách nhanh chóng. Chính vì nó quá nhanh, phần cứng máy tính hiện đại có thể tính toán hàng tỷ mã MD5 mỗi giây. Nếu lập trình viên dùng MD5 để lưu mật khẩu, một hacker với card đồ họa bình thường có thể bẻ khóa gần như mọi mật khẩu trong database chỉ trong vài phút. Lỗ hổng này cũng áp dụng cho các thuật toán cũ khác. Mặc dù bạn có thể dễ dàng tạo ra đầu ra bằng công cụ tạo hash SHA1, nhưng hiện nay SHA-1 đã bị xem là lỗi thời về mặt mật mã học và vô cùng mỏng manh trước các đợt tấn công bằng phần cứng hiện đại.

bcrypt giải quyết vấn đề tốc độ bằng cách tích hợp lịch trình khóa Eksblowfish, đòi hỏi khả năng truy xuất bộ nhớ rất lớn. Các GPU và thiết bị phá mật khẩu chuyên dụng có thể làm toán rất nhanh, nhưng chúng bị giới hạn bởi băng thông bộ nhớ. Bằng cách ép phần cứng phải liên tục đọc và ghi vào bộ nhớ (thuộc tính memory-hard), bcrypt phá hủy lợi thế của các dàn GPU đắt tiền mà hacker thường sử dụng. Chính đặc tính ngốn bộ nhớ này đã nâng tầm bcrypt vượt lên trên các thuật toán tối ưu tốc độ đời cũ.

Sự khác biệt giữa bcrypt, MD5 và dòng thuật toán SHA là gì?

Sự khác biệt chính nằm ở tốc độ thực thi và mục đích sử dụng; MD5 và SHA là các thuật toán băm cực nhanh dùng để kiểm tra tính vẹn toàn của dữ liệu, trong khi bcrypt là một hàm dẫn xuất khóa chậm chạp, ngốn tài nguyên, được thiết kế chuyên biệt cho mật khẩu. Việc hiểu rõ điểm khác biệt này là chìa khóa để áp dụng đúng công cụ mật mã cho đúng bài toán.

Dòng thuật toán Secure Hash Algorithm (SHA) rất tuyệt vời để xác thực chữ ký số, tạo chứng chỉ SSL, và kiểm tra file tải xuống. Các biến thể hiện đại của nó có độ an toàn cực cao chống lại việc đụng độ mã băm (collision). Ví dụ, sử dụng một công cụ tạo SHA256 sẽ cung cấp một chữ ký mã hóa một chiều rất nhanh và không thể phá vỡ về mặt toán học để xác minh dữ liệu. Tuy nhiên, SHA-256 không có cơ chế salt tích hợp sẵn, cũng không có hệ số công việc tùy chỉnh. Nó đơn giản là quá nhanh. Kẻ tấn công có thể tính toán hàng triệu mã SHA-256 mỗi giây để dò bẻ khóa database mật khẩu.

Tương tự, việc sử dụng công cụ tạo mã SHA512 sẽ mang lại một chuỗi đầu ra dài và phức tạp hơn. Mặc dù SHA-512 yêu cầu phần cứng 64-bit để chạy hiệu quả, nó vẫn là một thuật toán băm nhanh. Một số lập trình viên cố gắng bảo mật SHA-512 bằng cách tự thêm salt ngẫu nhiên và cho thuật toán lặp đi lặp lại hàng nghìn lần (kỹ thuật này gọi là hash stretching). Tuy nhiên, việc code thủ công kỹ thuật này thường tiềm ẩn nhiều lỗi bảo mật. bcrypt loại bỏ rủi ro này vì nó đã tích hợp sẵn việc xử lý salt và vòng lặp ngay bên trong thư viện tiêu chuẩn của mình.

Công cụ tạo bcrypt Generator thường được dùng để làm gì?

Một công cụ tạo mã băm bcrypt chủ yếu được các lập trình viên và quản trị hệ thống sử dụng để tạo mã hash mật khẩu thủ công cho việc kiểm thử (test), chèn dữ liệu mẫu (database seeding), hoặc khôi phục hệ thống. Khi xây dựng một ứng dụng mới, dev thường cần chèn trực tiếp một tài khoản admin khởi tạo vào database. Vì database yêu cầu một chuỗi đã được băm, họ không thể cứ thế gõ “admin123”. Họ phải dùng một công cụ tạo hash hợp lệ và chèn nó vào thông qua câu lệnh SQL.

Một trường hợp sử dụng phổ biến khác là gỡ lỗi (debug) các hệ thống đăng nhập. Nếu người dùng không thể log in, lập trình viên có thể dùng công cụ generator để kiểm tra xem logic băm mật khẩu bên trong ứng dụng có khớp với đầu ra của thư viện chuẩn không. Bằng cách băm cùng một mật khẩu thông qua một công cụ web và so sánh định dạng cấu trúc với dữ liệu lưu trong database, các dev có thể phát hiện xem code backend của họ có vô tình cắt bớt ký tự hay áp dụng sai hệ số công việc hay không.

Các nhà nghiên cứu bảo mật và chuyên gia kiểm thử xâm nhập (pentester) cũng sử dụng các công cụ này trong quá trình kiểm toán an ninh. Họ tạo ra các mã hash thử nghiệm để đảm bảo rằng ứng dụng đọc đúng chuỗi 60 ký tự và xử lý định danh thuật toán một cách chuẩn xác. Việc kiểm thử này đảm bảo hệ thống có khả năng chống chịu trước các bản ghi database bị can thiệp hoặc chứa lỗi.

Làm thế nào để tạo ra một mã băm bcrypt an toàn?

Để tạo ra một mã bcrypt an toàn, bạn phải bắt đầu với một mật khẩu gốc đủ mạnh, sau đó xử lý nó qua một công cụ hoặc thư viện bcrypt đáng tin cậy với hệ số công việc phù hợp. Độ mạnh của mã hash cuối cùng phụ thuộc rất nhiều vào độ phức tạp của chuỗi đầu vào. Ngay cả thuật toán mã hóa tối tân nhất cũng không thể bảo vệ một mật khẩu quá dễ đoán, chẳng hạn như “123456” hay “qwerty”.

Trước khi dùng công cụ băm, bạn nên đảm bảo văn bản đầu vào đủ vững chắc. Để có được một mật khẩu gốc bảo mật cao, bạn có thể dùng một công cụ tạo mật khẩu để sinh ra một chuỗi dài gồm các chữ cái, số và ký tự đặc biệt ngẫu nhiên. Khi đã có mật khẩu mạnh, bạn đưa nó vào công cụ generator. Tiêu chuẩn thực hành tốt nhất cho hệ số công việc hiện tại thường là 10 hoặc 12, tùy thuộc vào phần cứng máy chủ. Hệ số 10 mang lại một sự cân bằng hoàn hảo — chỉ mất chưa tới một giây để tạo ra, giúp trải nghiệm người dùng mượt mà, nhưng lại mất cực kỳ nhiều thời gian đối với một hacker đang cố dò hàng triệu tổ hợp.

Cách sử dụng Công cụ tạo mã bcrypt này như thế nào?

Để sử dụng công cụ tạo bcrypt này, bạn dán đoạn văn bản thô của mình vào ô nhập liệu và click nút thực thi để nhận về chuỗi đã băm. Công cụ được thiết kế với giao diện trực quan nhằm tối ưu hóa quy trình làm việc cho lập trình viên. Khi mở công cụ lên, bạn sẽ thấy một vùng nhập văn bản chính dành cho nội dung đầu vào.

Đầu tiên, gõ hoặc dán chuỗi bạn muốn băm vào ô “Nội dung đầu vào”. Ứng dụng này sử dụng hệ số công việc mặc định cứng là 10, đây là tiêu chuẩn ngành hiện tại để tạo thông tin đăng nhập an toàn thông qua thư viện bcryptjs. Khi văn bản đã sẵn sàng, hãy bấm nút xử lý. Công cụ sẽ giao tiếp với bộ máy mã hóa để tạo ra một chuỗi salt ngẫu nhiên, áp dụng thuật toán và tính toán ra mã hash cuối cùng.

Sau khi quá trình xử lý hoàn tất, công cụ sẽ tạo ra một bảng kết quả rõ ràng ngay bên dưới khu vực nhập liệu. Bảng này hiển thị số thứ tự, mã hash được tạo ra và một nút copy. Bạn có thể nhấn vào biểu tượng “Sao chép” nằm cạnh từng kết quả để copy ngay chuỗi 60 ký tự đó vào khay nhớ tạm. Một dòng chữ “Đã copy” hoặc dấu tick xanh sẽ xuất hiện tạm thời để xác nhận rằng mã hash đã được lưu thành công.

Chế độ nhiều dòng (Multi-Line Mode) hoạt động ra sao?

Chế độ nhiều dòng cho phép bạn xử lý cùng lúc nhiều chuỗi văn bản gốc trong một lần chạy bằng cách đặt mỗi chuỗi trên một dòng mới. Tính năng này vô cùng hữu ích cho các quản trị viên cần tạo mật khẩu khởi tạo cho hàng loạt người dùng cùng lúc.

Để kích hoạt tính năng này, hãy gạt nút “Bật hỗ trợ nhiều dòng” nằm phía trên ô nhập liệu. Khi được kích hoạt, công cụ sẽ ngừng xem đầu vào của bạn là một đoạn văn liền mạch. Thay vào đó, nó tự động nhận diện từng dấu xuống dòng. Nếu bạn dán 5 mật khẩu khác nhau trên 5 dòng riêng biệt, hệ thống sẽ sử dụng logic ánh xạ bất đồng bộ để xử lý đồng thời cả 5 chuỗi. Khi chạy xong, bảng kết quả sẽ hiển thị 5 dòng riêng biệt. Mỗi dòng sẽ chứa một mã hash hoàn toàn độc nhất với chuỗi salt ngẫu nhiên của riêng nó, kể cả khi bạn gõ chính xác cùng một mật khẩu trên nhiều dòng khác nhau.

Điều gì xảy ra sau khi bạn bấm xử lý dữ liệu?

Khi bạn gửi dữ liệu, ứng dụng sẽ tiếp nhận đầu vào, áp dụng thư viện bcryptjs với hệ số chi phí bằng 10, và xuất các mã hash đã tạo vào bảng kết quả. Toàn bộ quá trình này được chạy 100% trên trình duyệt (client-side) của bạn. Mật khẩu gốc của bạn tuyệt đối không được gửi đến bất kỳ máy chủ (backend) nào hay lưu vào database bên ngoài, đảm bảo quyền riêng tư và bảo mật tối đa.

Ứng dụng có cơ chế xử lý lỗi rất thông minh. Nếu có lỗi xảy ra với đầu vào, công cụ sẽ tự động dừng hoạt ảnh “Đang tải” và hiển thị thông báo lỗi tiêu chuẩn. Đối với các thao tác thành công, bảng kết quả cung cấp một nút “Copy tất cả” ở phía trên. Nếu bạn xử lý một đợt lớn mật khẩu qua chế độ nhiều dòng, việc bấm nút tổng quát này sẽ copy tất cả các mã hash từ bảng cùng một lúc, phân tách nhau bằng dấu xuống dòng, sẵn sàng để bạn dán ngay vào script khởi tạo database của mình.

Những hạn chế của bcrypt là gì?

Hạn chế lớn nhất của bcrypt là nó sẽ tự động cắt ngắn mật khẩu đầu vào với độ dài tối đa là 72 byte. Giới hạn đặc thù này là một tàn dư lịch sử gắn liền với thông số kỹ thuật ban đầu của thuật toán Blowfish. Khi người dùng nhập một mật khẩu dài 100 ký tự, thuật toán sẽ bỏ qua hoàn toàn ký tự thứ 73 trở đi. Nó chỉ mã hóa đúng 72 byte đầu tiên.

Về mặt lý thuyết, việc tự động cắt bớt này có thể gây ra những hiểu lầm về bảo mật. Nếu một người dùng tạo một cụm mật khẩu siêu dài tận 80 ký tự, họ có thể nghĩ rằng toàn bộ chuỗi đó đang bảo vệ tài khoản của mình. Nhưng trên thực tế, kẻ tấn công chỉ cần bẻ khóa 72 ký tự đầu tiên. Dù sao thì một mật khẩu 72 ký tự vốn dĩ đã là thứ gần như không thể bẻ khóa được, nhưng giới hạn này vẫn có thể gây ra lỗi ở các hệ thống sử dụng các token mã hóa cực dài làm mật khẩu.

Để vượt qua hạn chế này, một số kiến trúc bảo mật hiện đại áp dụng một kỹ thuật gọi là băm trước (pre-hashing). Trong quy trình này, ứng dụng trước tiên sẽ băm mật khẩu dài của người dùng bằng một thuật toán nhanh như SHA-256. Đầu ra của SHA-256 luôn là một chuỗi thập lục phân (hex) có kích thước cố định dài 32-byte hoặc 64-byte, hoàn toàn nằm gọn dưới giới hạn 72-byte. Sau đó, ứng dụng mới truyền chuỗi SHA-256 đó vào thuật toán bcrypt. Cách này đảm bảo rằng toàn bộ mật khẩu ban đầu đều được mã hóa một cách toàn vẹn mà không bị dính giới hạn cắt bớt độ dài.

Các phương pháp tối ưu (Best Practices) khi dùng bcrypt trong Ứng dụng Web

Phương pháp tốt nhất khi triển khai bcrypt là lưu trữ nguyên vẹn toàn bộ chuỗi hash dài 60 ký tự vào database và xác thực mật khẩu thông qua các hàm so sánh chuyên dụng do thư viện cung cấp thay vì so sánh chuỗi thủ công. Khi thiết kế cấu trúc database, bạn phải phân bổ đủ dung lượng cho mã hash. Vì đầu ra luôn có độ dài chính xác là 60 ký tự, các nhà phát triển nên sử dụng kiểu cột CHAR(60) hoặc VARCHAR(60) để đạt hiệu suất database tối đa.

Tuyệt đối không bao giờ cố gắng trích xuất chuỗi salt ra và lưu nó ở một cột riêng biệt trong cơ sở dữ liệu. Một trong những lợi thế kiến trúc tuyệt vời nhất của thuật toán này là salt, hệ số chi phí và mã băm được đóng gói vĩnh viễn cùng nhau. Việc chia tách chúng ra sẽ phá vỡ định dạng tiêu chuẩn và làm cho hệ thống trở nên khó bảo trì hơn rất nhiều.

Khi xác thực một người dùng, đừng bao giờ tạo ra một mã hash mới rồi cố gắng đối chiếu với mã hash đang lưu bằng các toán tử so sánh thông thường (như == hoặc ===). Vì thuật toán tạo ra một salt ngẫu nhiên mới mỗi lần nó chạy, việc băm cùng một mật khẩu hai lần sẽ luôn cho ra hai chuỗi hoàn toàn khác nhau. Thay vào đó, bạn phải truy vấn database để lấy chuỗi đang lưu trữ ra. Sau đó, truyền cả mật khẩu dạng thô (plaintext) mà người dùng vừa nhập và chuỗi đang lưu đó vào hàm chuẩn bcrypt.compare() được cung cấp bởi ngôn ngữ lập trình của bạn. Thư viện nội bộ sẽ tự động bóc tách salt và hệ số công việc từ chuỗi lưu sẵn, áp dụng chúng lên đoạn mật khẩu vừa nhập, và trả về kết quả an toàn (boolean) để báo cho bạn biết mật khẩu có khớp hay không.

Cuối cùng, hãy thường xuyên xem lại hệ số công việc của bạn. Chi phí ở mức 10 là an toàn trong thời điểm hiện tại, nhưng khi điện toán đám mây và công nghệ GPU tiếp tục tiến bộ, bạn sẽ dần phải tăng chi phí đó lên 11 hoặc 12. Vì hệ số chi phí đã được nhúng sẵn ngay bên trong chuỗi hash, việc tăng chi phí mặc định trong ứng dụng của bạn sẽ không làm hỏng các tài khoản đã tạo trước đó. Khi người dùng có mã hash cũ đăng nhập, bạn có thể âm thầm băm lại mật khẩu gốc của họ với hệ số chi phí mới cao hơn và cập nhật lại vào database, giúp hệ thống luôn duy trì được tiêu chuẩn bảo mật tối đa theo thời gian.