Nhà phát triển / Chữ ký
Trình tạo HMAC (SHA-256, SHA-512)
Tạo chữ ký HMAC cho thông điệp và khóa bí mật bằng SHA-256, SHA-384, SHA-512 hoặc SHA-1 ở dạng hex và Base64 để kiểm tra chữ ký webhook và API.
Trình tạo HMAC (SHA-256, SHA-512): HMAC kết hợp khóa bí mật với thông điệp thông qua một hàm băm, vì vậy chỉ người có khóa mới có thể tạo ra cùng chữ ký. HMAC được tính bằng Web Crypto API của trình duyệt, sử dụng cùng một cách triển khai mà trình duyệt dùng cho HTTPS. Khóa rỗng được chấp nhận; theo định nghĩa của tiêu chuẩn HMAC, khóa này được coi là khóa có 0 byte. Chạy 100% cục bộ trong trình duyệt của bạn, không có tệp nào được tải lên máy chủ.
- Danh mục
- Công cụ lập trình viên
- Lượt chạy
- Trong trình duyệt của bạn
- Chi phí
- Miễn phí · không cần đăng ký
- Trạng thái khả dụng
- Sẵn sàng sử dụng
Chạy hoàn toàn trong trình duyệt của bạn
——Thông điệp được đọc dưới dạng văn bản UTF-8, chính xác như nội dung bạn nhập, bao gồm cả khoảng trắng và ngắt dòng; ký tự xuống dòng ở cuối sẽ làm thay đổi kết quả. Webhook từ các dịch vụ như Stripe và GitHub được ký bằng HMAC-SHA256 theo cách này.
Xác minh webhook
Lấy phần thân yêu cầu thô trước khi phân tích cú pháp, tính HMAC bằng bí mật dùng chung, rồi so sánh với tiêu đề chữ ký bằng phép so sánh có thời gian không đổi để thời gian xử lý không làm lộ số ký tự khớp. Từ chối các yêu cầu có dấu thời gian cũ hơn vài phút để ngăn việc phát lại.
Để tạo hash không dùng khóa, hãy dùng trình tạo hash; để xử lý token có chữ ký, hãy dùng bộ giải mã JWT.
Khóa
Khóa có độ dài bằng đầu ra hash, chẳng hạn 32 byte ngẫu nhiên cho SHA-256, sẽ cung cấp đầy đủ mức bảo mật; các khóa dài hơn trước tiên sẽ được băm rút gọn. Không lưu khóa trong kho mã nguồn và hãy thay khóa nếu khóa bị lộ.
Cách sử dụng
- Dán thông điệp chính xác như khi được gửi, chẳng hạn phần thân thô của webhook.
- Nhập khóa bí mật ở dạng văn bản hoặc hệ thập lục phân, rồi chọn hàm băm.
- So sánh kết quả hex hoặc Base64 với chữ ký bạn đã nhận.
Quyền riêng tư và giới hạn
Thông điệp và khóa được giữ trong trình duyệt của bạn; không có gì được gửi đi đâu cả.
Công cụ liên quan
Câu hỏi thường gặp
Tại sao chữ ký của tôi không khớp với chữ ký của webhook?
Thông điệp được ký phải là phần thân thô, khớp từng byte: việc phân tích rồi tuần tự hóa lại JSON, hoặc thiếu hay thừa một dòng mới, đều làm thay đổi thông điệp. Một số dịch vụ ký cả dấu thời gian và phần thân cùng nhau, chẳng hạn Stripe dùng t=…,payload.
HMAC-SHA1 còn an toàn không?
Đối với HMAC, thuật toán này vẫn được xem là an toàn, không giống SHA-1 khi dùng để băm thông thường, nhưng các hệ thống mới nên sử dụng HMAC-SHA256.
Hex hay Base64?
Đây là hai cách biểu diễn cùng một chuỗi byte; hãy dùng cách mà dịch vụ hiển thị. GitHub dùng hex với tiền tố sha256=, còn nhiều dịch vụ khác dùng Base64.
Công cụ miễn phí · trong trình duyệt của bạn lượt chạy · không cần tài khoản