Gerador e verificador de HMAC
Crie e verifique assinaturas HMAC-SHA256 e outras variantes de HMAC com uma chave secreta.
Opcional. O valor de um cabeçalho X-Hub-Signature-256 do GitHub (sha256=…) pode ser colado do jeito que está.
Um HMAC é uma assinatura gerada a partir de uma mensagem e de uma chave secreta compartilhada: quem tem a chave consegue calculá-lo de novo, e qualquer mudança na mensagem ou na chave gera outro valor. Webhooks (GitHub, Stripe, Slack), requisições de API assinadas e tokens JWT HS256 usam HMAC. O HMAC é atualizado enquanto você digita, e você pode colar uma assinatura para conferi-la. Ele é calculado pelo Web Crypto nativo do seu navegador, então a mensagem e a chave nunca saem do seu dispositivo; é grátis e não exige cadastro.
Como gerar e verificar um HMAC
- Cole a mensagem exatamente como foi assinada — no caso de um webhook, o corpo bruto da requisição.
- Digite a chave secreta ou clique em Gerar para criar uma aleatória; escolha Hex se você recebeu a chave como bytes em hex.
- Escolha o algoritmo (SHA-256, salvo indicação em contrário) e copie o resultado em hex ou Base64.
- Para conferir uma assinatura, cole-a em Verificar assinatura — o valor de um cabeçalho sha256=… do GitHub funciona do jeito que está.
Recursos
- HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 e HMAC-SHA512
- Chave secreta em texto (UTF-8) ou hex, ou uma chave aleatória de 32 bytes com Gerar
- Resultado em hex ou Base64, atualizado enquanto você digita
- Confere uma assinatura recebida em hex ou Base64 (inclusive URL-safe), com ou sem o prefixo sha256= do GitHub ou v0= do Slack
- Avisa quando uma assinatura tem o tamanho de outro algoritmo, com um botão para trocar
- Calculado com o Web Crypto nativo do seu navegador
É privado?
Sim. O HMAC é calculado pelo Web Crypto nativo do seu navegador; a mensagem e a chave secreta ficam nesta página e nunca são enviadas nem salvas.
Perguntas frequentes
Como verificar a assinatura de um webhook do GitHub?
Cole o corpo bruto da requisição como mensagem, o secret do webhook como chave em texto e o valor do cabeçalho X-Hub-Signature-256 em Verificar assinatura. O GitHub envia sha256= seguido do HMAC-SHA256 do corpo em hex, e o prefixo é lido do jeito que está.
Como conferir a assinatura de um JWT HS256?
Cole o cabeçalho e o payload do token — tudo antes do segundo ponto — como mensagem e o segredo como chave, escolha SHA-256 e cole a terceira parte do token em Verificar assinatura. O Base64 URL-safe dela é lido do jeito que está.
Por que minha assinatura não confere?
A mensagem precisa ser, byte a byte, o que foi assinado: um JSON reformatado, uma quebra de linha a mais ou a menos no final ou quebras de linha do Windows (CRLF) mudam o HMAC. O texto digitado aqui usa quebras de linha LF. Confira também o algoritmo e se a chave é texto ou hex.
O resultado é igual ao do OpenSSL?
Sim. printf '%s' 'mensagem' | openssl dgst -sha256 -hmac 'chave' mostra o mesmo valor em hex, e uma chave em hex corresponde a -mac HMAC -macopt hexkey:…. Use printf ou echo -n: o echo simples acrescenta uma quebra de linha, que também é assinada.
O HMAC-SHA1 ainda é seguro?
Para HMAC, na prática sim: as colisões conhecidas do SHA-1 não quebram o HMAC-SHA1, e por isso webhooks mais antigos ainda o usam. Para qualquer coisa nova, escolha HMAC-SHA256.