HMAC Generator — SHA-256, SHA-512 & SHA-1

Compute keyed HMAC signatures for API requests and webhooks, and check whether a received signature is valid — using your browser’s Web Crypto API.

Runs in your browserUpdated
Algorithm

🔒 Runs locally with your browser’s Web Crypto API — nothing you type is sent to a server.

Your data never leaves your computer. All processing happens 100% locally in your browser.

How to use the HMAC Generator

  1. Paste the message exactly as it is signed — the raw request body for webhooks.
  2. Enter the secret key and pick its encoding.
  3. Choose the hash algorithm; the HMAC updates instantly.
  4. Paste a received signature into Expected signature to verify it.

What is HMAC?

HMAC (Hash-based Message Authentication Code, RFC 2104) combines a secret key with a hash function to produce a signature. Anyone with the key can compute the same value; anyone without it cannot forge one. APIs use HMAC to sign requests (AWS Signature v4, many payment gateways) and webhooks use it so you can prove a callback really came from the sender.

Verifying webhooks

ServiceHeaderAlgorithm / encoding
GitHubX-Hub-Signature-256HMAC-SHA256, hex, prefixed sha256=
StripeStripe-SignatureHMAC-SHA256 hex of timestamp.body
ShopifyX-Shopify-Hmac-Sha256HMAC-SHA256, Base64
SlackX-Slack-SignatureHMAC-SHA256 hex of v0:timestamp:body

The most common reason a signature does not match is that the body was changed before signing — parsed and re-serialised JSON, different whitespace or line endings. Always sign the raw bytes you received. The verifier above accepts hex (with or without sha256=), Base64 and Base64url.

HMAC vs plain hashes

A plain SHA-256 hash proves integrity but not authenticity: anyone can recompute it after changing the message. HMAC includes the secret, so only key holders can produce a valid value. Use a key of at least as many random bytes as the hash output (32 for SHA-256). In server code, compare signatures with a constant-time function such as crypto.timingSafeEqual.

For unkeyed hashes, use the hash generator; for signed tokens, the JWT encoder.

Tools that pair well with the HMAC Generator

  • JWT Decoder — Paste a JSON Web Token to inspect its header and payload, check when it expires and verify its signature.
  • AES Encrypt & Decrypt — Protect a note, secret or config value with a password using AES-256 — or decrypt text produced by openssl enc.
  • Bcrypt Generator & Checker — Create bcrypt hashes for test users, seed data or config files, and check whether a password matches a stored hash — without sending either anywhere.
  • Htpasswd Generator — Generate user:hash lines for HTTP Basic Authentication in Apache, Nginx, Traefik and Caddy — with bcrypt by default and nothing sent to a server.

Frequently asked questions

Why does my HMAC not match the webhook signature?
Usually the message differs: the body must be the raw bytes received, not JSON that was parsed and re-stringified. Also check the algorithm, the key encoding and any prefix like sha256=.
Is HMAC-SHA1 still secure?
HMAC-SHA1 is still considered secure for authentication, unlike plain SHA-1 for signatures, but new systems should use HMAC-SHA256.
Is my secret key sent anywhere?
No. The HMAC is computed in your browser with the Web Crypto API.
What is the difference between hex and Base64 output?
They encode the same bytes differently. Hex is 64 characters for SHA-256; Base64 is 44 characters. Use whatever the receiving system expects.

Related tools