HMAC Generator
Compute HMAC signatures locally with WebCrypto: SHA-1/256/384/512, HEX and Base64 output.
Signature (HEX)
—
Signature (Base64)
—
The message and key are processed entirely in your browser via WebCrypto. No network request is made.
How to use it
- Paste the message and enter the secret key.
- Pick a hash algorithm: SHA-1, SHA-256, SHA-384 or SHA-512 (SHA-256 is the usual choice for webhook verification).
- Click Generate — both the HEX and Base64 forms appear immediately.
- Copy whichever form your platform expects; webhook providers differ.
- Use Sample first if you want to verify the output against a known test vector.
Common use cases
- Webhook signatures — compute the signature your provider documents (Stripe-style
v1=payloads, GitHubx-hub-signature-256and similar) before wiring up verification. - API request signing — confirm your client code produces the same signature as the spec expects.
- Teaching and debugging — see how one flipped byte changes the whole signature.
Why it stays private
Signing runs through the browser's own WebCrypto (crypto.subtle). The key and message are encoded in memory, signed locally and never transmitted — the page makes no network requests.
FAQ
Q: Is this safe for production secrets? A: The computation is local, but pasting long-lived production keys into any web page is a habit to avoid. Prefer a CLI for real secrets; this tool is for verification and testing.
Q: Which output format should I use? A: Whatever the verifying side documents — GitHub uses lowercase HEX, many webhook systems use Base64. The tool gives you both.
Q: Why include SHA-1? A: Legacy systems still require it. For new designs pick SHA-256 or stronger; the descriptions in each tool flag this where relevant.
Your data stays on this device
HMAC Generator runs 100% locally. Everything you paste or drop is processed by your own browser and never transmitted. Nothing is stored on our servers — close the tab and it is gone.
Nothing you type is sent to a server, logged, or used for analytics. The page works even with your network disconnected after first load.