tigtools

Trình tạo HMAC

Tạo mã xác thực thông điệp có khóa (HMAC) từ thông điệp và khóa bí mật, hoặc kiểm tra chữ ký bạn nhận được. Khóa và thông điệp chỉ nằm trong trình duyệt của bạn.

Chạy ngay trên trình duyệt Không cần đăng ký

Khóa và thông điệp chỉ được xử lý trong thẻ trình duyệt này và không bao giờ được gửi đi. Tuy vậy, hãy tránh dán thông tin bí mật đang dùng trong môi trường thực tế trên máy tính dùng chung hoặc không đáng tin cậy.
Định dạng khóa

Được ký dưới dạng UTF-8 đúng như nội dung đã nhập. Dấu cách hoặc xuống dòng ở cuối sẽ làm thay đổi kết quả.

Định dạng đầu ra

Dán chữ ký ở dạng hex (không phân biệt chữ hoa, chữ thường) hoặc Base64 để so sánh với kết quả ở trên.

Cách sử dụng

  1. Nhập khóa bí mật và chọn định dạng văn bản thuần hoặc byte hex.
  2. Dán thông điệp, chẳng hạn nội dung webhook nguyên trạng như khi nhận được.
  3. Chọn thuật toán và định dạng đầu ra mà dịch vụ của bạn sử dụng; HMAC sẽ được cập nhật khi bạn nhập.
  4. Để kiểm tra chữ ký, hãy dán chữ ký vào ô xác minh và tìm kết quả “Khớp”.

Cách hoạt động

HMAC (RFC 2104) kết hợp khóa bí mật với hàm băm để tạo chữ ký mà chỉ người có khóa mới tạo được. Các dịch vụ như webhook và yêu cầu API có chữ ký gửi HMAC kèm theo mỗi thông điệp để bên nhận có thể kiểm tra tính xác thực và nguyên vẹn của thông điệp.

Công cụ này sử dụng Web Crypto API của trình duyệt (crypto.subtle.importKey và sign) và đã được kiểm tra bằng các bộ giá trị kiểm thử RFC 4231 và RFC 2202. Khóa dạng văn bản và thông điệp được mã hóa thành UTF-8. Khóa hex được giải mã thành byte thô; khoảng trắng, dấu hai chấm và tiền tố 0x ở đầu sẽ bị bỏ qua. HMAC-SHA-256 là lựa chọn phổ biến nhất; HMAC-SHA-1 vẫn được xem là an toàn khi dùng làm MAC nhưng chủ yếu được các API cũ sử dụng.

Nếu chữ ký không khớp, hãy kiểm tra những chi tiết thường gây khác biệt: byte chính xác của thông điệp (nhiều nhà cung cấp webhook ký phần thân thô, không phải JSON đã được định dạng lại), dấu thời gian hoặc tiền tố mà nhà cung cấp thêm vào chuỗi được ký, khóa được dùng dưới dạng văn bản hay cần giải mã từ hex hoặc Base64 trước, và chữ ký dự kiến ở dạng hex hay Base64, có tiền tố như “sha256=” hay không. Hãy xóa tiền tố đó trước khi so sánh.

Ví dụ

Trường hợp kiểm thử RFC 4231

Khóa “Jefe” (dạng văn bản), thông điệp “what do ya want for nothing?” và HMAC-SHA-256 cho kết quả 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Chọn “Thử ví dụ” để tải nội dung này.

Kiểm tra chữ ký webhook

Nhà cung cấp gửi tiêu đề X-Signature: sha256=… kèm theo mỗi yêu cầu. Dán phần thân thô của yêu cầu làm thông điệp, dùng bí mật webhook làm khóa, chọn HMAC-SHA-256 và Hex, rồi dán giá trị sau “sha256=” vào ô xác minh.

Khóa được mã hóa dưới dạng hex

Một số hệ thống cấp khóa dưới dạng chuỗi hex như 0b0b0b…. Chọn Hex làm định dạng khóa để công cụ ký bằng các byte đã giải mã; nếu coi cùng chuỗi đó là văn bản, kết quả sẽ hoàn toàn khác.

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

HMAC khác gì với mã băm thông thường?

Bất kỳ ai cũng có thể tính mã băm thông thường như SHA-256 của một thông điệp. HMAC còn phụ thuộc vào khóa bí mật, vì vậy chỉ người có khóa mới tạo hoặc kiểm tra được. Điều này chứng minh thông điệp đến từ người nắm giữ khóa và chưa bị thay đổi.

Tại sao HMAC của tôi không khớp với HMAC trên máy chủ?

Byte đầu vào hầu như luôn khác nhau: ký tự xuống dòng, khoảng trắng, thứ tự khóa JSON, bảng mã ký tự hoặc khóa cần được giải mã từ hex hay Base64. Ngoài ra, hãy so sánh cùng định dạng (hex hoặc Base64) và xóa các tiền tố như “sha256=”.

Khóa bí mật của tôi có được gửi đi đâu không?

Không. Khóa và thông điệp chỉ được Web Crypto API sử dụng trong thẻ trình duyệt này. Chúng không được tải lên, lưu trữ hoặc đưa vào hệ thống phân tích.

HMAC-SHA-1 còn an toàn không?

Các va chạm SHA-1 không trực tiếp làm mất tính an toàn của HMAC-SHA-1; thuật toán này vẫn được chấp nhận để đảm bảo khả năng tương thích. Với hệ thống mới, hãy dùng HMAC-SHA-256 trở lên.

Quyền riêng tư

Khóa, thông điệp và kết quả chỉ tồn tại trong thẻ trình duyệt này. Không có dữ liệu nào được tải lên, lưu trữ hoặc gửi đến dịch vụ phân tích; chỉ ghi nhận một sự kiện ẩn danh cho biết công cụ đã được sử dụng.