logo
GeekFormat

Tạo & Xác minh HMAC

Thuật toán Hashi

Chiều dài chìa khóa được đề nghị tương ứng với chiều dài của đầu ra H đà: snfa-1 =20 byte, slf-256 =32 byte, slf-384 =48 byte, snef-512 =64 byte

Nội dung0 ký tự
Chữ ký HMAC ( hex)
Đang chờ đầu vào…

Ghi chú

  • HMAC tạo ra chữ ký dựa trên phím và thuật toán Hashi để xác thực nguồn và tính toàn vẹn
  • Hỗ trợ slug- 1 / sch-256 / slf-384 / slu-512
  • Tạo và xác thực cả hai trong trình duyệt, mà không cần tải lên dữ liệu
  • Kiểm tra sử dụng độ dài cố định bởi byte để giảm sự khác biệt chuỗi thời gian

Tạo và xác minh chữ ký HMAC trực tuyến miễn phí, hỗ trợ các thuật toán SHA phổ biến. Phù hợp cho ký API, xác minh Webhook và gỡ lỗi bảo mật.

Đề xuất Liên quan

Trường hợp sử dụng

  • Phát triển webhook Stripe: Gỡ lỗi callback thanh toán Stripe, xác minh tính đúng đắn của header `Stripe-Signature`
  • Tích hợp webhook GitHub: Xác minh chữ ký `X-Hub-Signature-256` cho sự kiện Push và Pull Request GitHub
  • Đồng bộ đơn hàng Shopify: Xác minh chữ ký `X-Shopify-Hmac-Sha256` cho webhook cập nhật đơn hàng Shopify
  • Chữ ký bot Slack: Xác minh `X-Slack-Signature` cho callback sự kiện Slack
  • Gỡ lỗi phát triển JWT: Ký JWT bằng HS256, xác minh tính hợp lệ của token
  • Ký yêu cầu API: Triển khai AWS Signature V4 hoặc sơ đồ ký API tùy chỉnh

Tính năng

  • Hỗ trợ nhiều thuật toán: HMAC-SHA256/384/512, SHA1, MD5 — bao phủ API hiện đại và hệ thống cũ
  • Xác minh chữ ký Webhook: Hỗ trợ tích hợp cho định dạng chữ ký Stripe/GitHub/Shopify/Slack với phân tích cú pháp tự động
  • Ba định dạng đầu ra: Hex / Base64 / Base64URL — phù hợp mọi yêu cầu API hoặc nền tảng
  • Tạo thời gian thực: Tự động tính toán khi thay đổi đầu vào với debounce 300ms, không cần nhấp nút
  • Chế độ xác minh chữ ký: Dán chữ ký dự kiến để so sánh, hiển thị kết quả khớp trong thời gian thực
  • Phát hiện độ dài khóa: Theo dõi sức mạnh khóa thời gian thực với cảnh báo cho khóa ngắn
  • Xử lý trên trình duyệt: Web Crypto API cho tính toán cục bộ, khóa không bao giờ được tải lên máy chủ
  • Hỗ trợ JWT: Đầu ra HMAC-SHA256 có thể sử dụng trực tiếp cho ký HS256

Cách Sử dụng

  1. Chọn thuật toán: Mặc định HMAC-SHA256, được khuyến nghị cho API hiện đại
  2. Nhập thông điệp: Dán nội dung thông điệp thô hoặc nội dung yêu cầu API
  3. Nhập khóa: Nhập Webhook Secret hoặc API Secret
  4. Chọn định dạng: Chọn định dạng đầu ra (hex cho Stripe, Base64URL cho JWT)
  5. Xác minh chữ ký: Chuyển sang chế độ xác minh, dán chữ ký dự kiến để so sánh

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

HMAC và hash thông thường khác nhau như thế nào?

Hàm hash thông thường (như SHA256) chỉ tính toán digest của chính thông điệp — ai cũng có thể tính được. HMAC đưa một khóa bí mật vào quá trình hash, nên chỉ những bên có khóa mới có thể tạo hoặc xác minh chữ ký hợp lệ. HMAC đảm bảo cả tính toàn vẹn và tính xác thực của thông điệp, trong khi hash thông thường chỉ xác minh tính toàn vẹn.

Làm thế nào để xác minh chữ ký webhook Stripe/GitHub/Shopify?

Mỗi nền tảng định dạng chữ ký khác nhau: Stripe sử dụng header `Stripe-Signature` với định dạng `t=timestamp,v1=hex_signature`, ký chuỗi `timestamp.payload`; GitHub sử dụng `X-Hub-Signature-256` với định dạng `sha256=hex_signature`; Shopify sử dụng `X-Shopify-Hmac-Sha256` với giá trị mã hóa Base64. Công cụ này hỗ trợ xác minh trực tiếp các định dạng phổ biến này.

Đầu ra Hex, Base64 và Base64URL khác nhau như thế nào?

Hex là định dạng thập lục phân (0-9, A-F), dễ đọc cho con người, tuyệt vời cho gỡ lỗi. Base64 là mã hóa 64 ký tự, gọn hơn, lý tưởng để nhúng vào JSON. Base64URL là phiên bản an toàn cho URL (thay +/ bằng -_), được sử dụng trong header JWT và tham số URL.

Nên sử dụng thuật toán HMAC nào?

**HMAC-SHA256 được khuyến nghị**: đây là tiêu chuẩn hiện đại cho API và webhook (được Stripe, GitHub, Shopify, Slack sử dụng), với đầu ra 32 byte và hỗ trợ phổ quát. SHA-512 cung cấp bảo mật cao hơn nhưng đầu ra dài hơn (64 byte). SHA1 chỉ dành cho hệ thống cũ. MD5 đã bị loại bỏ và chỉ nên dùng cho API rất cũ.

Yêu cầu về độ dài khóa là gì?

Khóa càng dài càng an toàn. Khuyến nghị tối thiểu 16 ký tự (128 bit), 32+ ký tự cho môi trường sản xuất. Công cụ theo dõi độ dài khóa và cảnh báo nếu quá ngắn. Sử dụng trình tạo số ngẫu nhiên an toàn mật mã cho khóa, không sử dụng mật khẩu đơn giản hoặc chuỗi dễ đoán.

Tại sao xác minh chữ ký hiển thị không khớp?

Nguyên nhân phổ biến: 1) Thông điệp chứa khoảng trắng hoặc xuống dòng thừa; 2) Nền tảng ký một chuỗi kết hợp (ví dụ: Stripe ký `timestamp.payload`); 3) Chữ ký bao gồm tiền tố cần xóa (như `sha256=` của GitHub); 4) Sử dụng thuật toán khác. Kiểm tra xem cả hai bên có sử dụng thông số giống hệt nhau không.

HMAC có thể dùng để ký JWT không?

Có. Thuật toán HS256 của JWT là HMAC-SHA256, và HS512 là HMAC-SHA512. Đầu ra HMAC-SHA256 của công cụ này có thể được sử dụng trực tiếp làm nội dung chữ ký cho HS256. Header và Payload JWT được mã hóa Base64URL, sau đó ký bằng HS256.

Công cụ HMAC trực tuyến này có an toàn không?

Công cụ này sử dụng Web Crypto API để thực hiện tất cả tính toán cục bộ trên trình duyệt của bạn. Khóa và thông điệp không bao giờ được gửi đến bất kỳ máy chủ nào. Bạn có thể xác minh điều này bằng cách mở bảng Network trong Công cụ dành cho nhà phát triển của trình duyệt — không có yêu cầu bên ngoài nào được thực hiện. Phù hợp cho thử nghiệm và phát triển; đối với khóa sản xuất cực kỳ nhạy cảm, hãy sử dụng công cụ ngoại tuyến cục bộ.

Chữ ký HMAC có thể bị giả mạo không?

Không. Bảo mật HMAC phụ thuộc vào việc giữ bí mật khóa và khả năng chống va chạm của thuật toán hash. Với khóa đủ dài và ngẫu nhiên, không có cuộc tấn công nào được biết đến có thể giả mạo chữ ký HMAC hợp lệ. Xoay khóa định kỳ là thực hành bảo mật tốt.

Tạo & Xác minh HMAC là gì?

HMAC (Hash-based Message Authentication Code) là công nghệ xác thực thông điệp được sử dụng rộng rãi, được định nghĩa trong RFC 2104. HMAC xử lý khóa cùng với thông điệp thông qua hàm hash để tạo ra chữ ký có độ dài cố định. Khác với hash thông thường, HMAC yêu cầu biết khóa để tạo hoặc xác minh chữ ký, đảm bảo cả tính toàn vẹn và tính xác thực của thông điệp.

**HMAC là nền tảng của bảo mật API hiện đại**. Stripe, GitHub, Shopify, Slack và Twilio sử dụng HMAC-SHA256 để ký các sự kiện webhook, đảm bảo rằng các yêu cầu thực sự đến từ nền tảng. AWS sử dụng HMAC-SHA256 để ký yêu cầu Signature V4. Thuật toán HS256 của JWT về bản chất là HMAC-SHA256. Hiểu HMAC là bước đầu tiên để nắm vững bảo mật API.

**Mỗi nền tảng có định dạng chữ ký khác nhau**: Định dạng của Stripe là `t=timestamp,v1=hex_signature`, ký `timestamp.payload`; GitHub sử dụng `X-Hub-Signature-256` với định dạng `sha256=hex_signature`; Shopify sử dụng `X-Shopify-Hmac-Sha256` với giá trị mã hóa Base64. Công cụ này hỗ trợ phân tích cú pháp và xác minh tự động cho các định dạng phổ biến này.

**Tại sao xác minh chữ ký thất bại?** Nguyên nhân phổ biến nhất là định dạng thông điệp không khớp: nền tảng có thể đang ký `timestamp.payload` thay vì nội dung thông điệp thô; hoặc thông điệp chứa xuống dòng thừa; hoặc chữ ký bao gồm tiền tố (như `sha256=`) cần phải xóa. Kiểm tra kỹ tài liệu nền tảng và so sánh bằng cách sử dụng giá trị thập lục phân thô.

Công cụ này sử dụng **Web Crypto API** (SubtleCrypto) tích hợp sẵn của trình duyệt cho tính toán HMAC — cùng thư viện mật mã chạy HTTPS và TLS. Tất cả tính toán diễn ra cục bộ; khóa và thông điệp không bao giờ được gửi đến bất kỳ máy chủ nào. Mở bảng Network trong Công cụ dành cho nhà phát triển của trình duyệt để xác minh không có yêu cầu bên ngoài nào được thực hiện.