Skip to content
Developer

HMAC Generator

Generate HMAC signatures (SHA-256/384/512) for a message and secret.

hmacsignaturesha256secret
Loading tool…

About the HMAC Generator

The HMAC Generator produces keyed-hash message authentication codes for a message plus a secret, letting you verify both the integrity and the authenticity of data in the browser. You supply a message, a secret key — kept behind a password field with a show/hide eye toggle so shoulder-surfing is kept out of the loop — and pick HMAC-SHA-256, HMAC-SHA-384, or HMAC-SHA-512 from a dropdown. The output is a hexadecimal signature computed with Web Crypto's HMAC implementation, and it recomputes the instant you change any of the three inputs. Guardrails are explicit: an empty secret triggers Secret is required for HMAC and an empty message triggers Message is empty, so you never receive a signature computed against a wrong key silently. A stat strip reports the algorithm, output bits (256, 384, or 512), and the byte sizes of both the message and the secret. Because the same secret and message always produce the same digest, this tool is ideal for sanity-checking webhook signatures against your server code, verifying API payload integrity, or confirming a third-party implementation matches yours before you wire up real production keys.

HMAC Generator examples

Input
Message: The quick brown fox jumps over the lazy dog · Secret: my-secret-key · Algorithm: SHA-256
Output
7e73ad1085ba8d321dbc7f864da512a2b8bfd19dc68917d801ccdbb230f5ac22
Note: The default setup produces this 64-character hex signature; the same message and secret always yield the same HMAC.
Input
Same message and secret · Algorithm: SHA-512
Output
8c465556489d68ddb8c6bbec64bbeef8f1447ea7e4bf354d68b9f30afab750e78ddc802e1e3cd120b8c85cca0290c518a45a03dc8e9668014e55a8e326ba1bad
Note: Switching the dropdown to SHA-512 doubles the output to 128 hex characters (512 bits) without changing any other input.
Input
Message: order-12345 · Secret: webhook-secret-2026 · Algorithm: SHA-256
Output
264429f36b03e27da39ac4e34de8327dc888bcf8a321534235d3fd01e050779d
Note: A realistic webhook payload check — compare this against the signature header your server computed for the same message and secret.

How to use the HMAC Generator

  1. 1

    Enter the data to authenticate in the Message textarea.

  2. 2

    Type the secret into the Secret key field — it is masked, with an eye button to reveal it.

  3. 3

    Pick HMAC-SHA-256, HMAC-SHA-384, or HMAC-SHA-512 from the Algorithm dropdown.

  4. 4

    Read the hex signature in the result box; it recomputes whenever any input changes.

  5. 5

    Download the result as hmac-sha256.txt (the filename follows the selected algorithm).

Common use cases

  • Verifying webhook signatures against the secret shared with a provider like GitHub or Stripe.
  • Confirming a mobile app signed a request with the same key as your API.
  • Comparing your backend HMAC implementation against a known-good browser computation.
  • Authenticating messages between two internal services during a proof of concept.
  • Checking whether a vendor signature used SHA-256 or SHA-512 by testing both algorithms.
  • Teaching HMAC concepts with a hands-on example that recomputes instantly.

Best practices

  • Use a secret of at least 32 random bytes in production — the sample secret exists only to demonstrate the tool.
  • Verify HMAC signatures with a constant-time comparison function in your real code; visual comparison is only for development.
  • Never reuse the same secret across unrelated integrations; rotate secrets regularly.
  • Treat the signed message as canonical — signing the same JSON with different key ordering produces a different HMAC.
  • Prefer SHA-256 for broad compatibility; use SHA-384 or SHA-512 only where your platform or policy requires longer digests.
  • Clear the secret from the field after testing sensitive values, since it stays in browser memory.

Tips

  • Toggle the eye icon to reveal the secret only when checking typos, then hide it again.
  • Use the Message bytes and Secret bytes stats to confirm you copied the exact payload — one hidden space changes the HMAC.
  • Test both SHA-256 and SHA-512 when a vendor signature does not match; the wrong algorithm is a common cause.
  • Clear both fields with the Clear button before pasting real production secrets, so stale values never mix into a test.

Frequently asked questions

An HMAC is meaningless without a key — the secret is what makes the code message-authenticating rather than a plain hash. If the secret is empty the tool shows the error Secret is required for HMAC and produces nothing, and an empty message triggers Message is empty instead.

A plain hash can be recomputed by anyone who knows the message. An HMAC mixes the message with a secret key through two hash rounds, so only someone holding the key can produce a valid signature — that is what verifies authenticity, not just integrity.

No. The secret is imported into the Web Crypto API as a raw HMAC key locally and used only for the signature. The field is masked by default, and toggling the eye icon only changes what is visible on your screen.

HMAC-SHA-256 is the safe default and what most webhook providers use. Choose SHA-384 or SHA-512 when your platform requires longer digests; the tool shows the output bit size (256, 384, or 512) in the stats so you can verify.

The exact signed string must match byte-for-byte — order, whitespace, and encoding all matter. Providers usually document the canonical form, often raw JSON body plus timestamp. Paste that exact string here and you should reproduce their sample signature.

Yes. Both are UTF-8 encoded before signing, so accented characters and emoji work. Just remember that the verifying system must apply the same encoding, otherwise the signatures will not match.

Explore more developer tools

Browse the full collection of developer tools on the hub, or jump back to all categories.

Related tools

Did this tool help?

Anonymous — one tap, no sign-up.