Gerador de HMAC
Crie e confira assinaturas HMAC com SHA-256, SHA-384, SHA-512 ou SHA-1, com a chave em texto, hexadecimal ou Base64.
Como usar
Digite ou cole a mensagem, informe a chave secreta e escolha o algoritmo; a assinatura aparece enquanto você digita, em hexadecimal e em Base64, cada uma com seu botão “Copiar”. Ela é calculada com a API Web Crypto do navegador, e nada é enviado para lugar nenhum.
O HMAC, definido no RFC 2104, combina uma chave secreta com uma função de hash. Qualquer pessoa calcula o SHA-256 de uma mensagem, mas só quem tem a chave consegue calcular o HMAC dela; por isso, uma assinatura que confere mostra que a mensagem veio de quem tem a chave e não foi alterada no caminho. A assinatura tem o tamanho do hash: 32 bytes no SHA-256, 48 no SHA-384, 64 no SHA-512 e 20 no SHA-1.
A chave pode ser digitada como texto, usado como bytes UTF-8, ou informada em hexadecimal ou Base64 quando um serviço a mostra assim: os mesmos caracteres lidos em outro formato são outra chave. A mensagem é assinada exatamente como foi digitada, então um espaço, uma quebra de linha ou um caractere diferente muda a assinatura inteira.
Para conferir um webhook, cole o corpo bruto da requisição como mensagem, o segredo do endpoint como chave e a assinatura recebida em “Assinatura para conferir”. O GitHub, por exemplo, envia um cabeçalho X-Hub-Signature-256 com sha256= seguido do HMAC-SHA256 do corpo em hexadecimal; o prefixo é ignorado. O SHA-1 só aparece para sistemas antigos: o GitHub ainda envia um cabeçalho HMAC-SHA1, só por compatibilidade.
Exemplo
Confere o exemplo de webhook documentado pelo GitHub: o segredo “It's a Secret to Everybody” e o conteúdo “Hello, World!” dão a assinatura sha256= publicada pelo GitHub, então ela confere.
Jefe · what do ya want for nothing?HMAC-SHA256 5bdcc146…64ec3843: o vetor de teste do RFC 4231.It's a Secret to Everybody · Hello, World!O exemplo documentado pelo GitHub: sha256=757107ea…8b043e17.0b0b…0b (hex, 20 bytes) · Hi ThereHMAC-SHA256 b0344c61…2e32cff7: caso de teste 1 do RFC 4231, com a chave em hexadecimal.abcdComo texto, 4 bytes; como hexadecimal, 2 bytes (ab cd): duas chaves diferentes e duas assinaturas diferentes.
Perguntas frequentes
HMAC é a mesma coisa que um hash?
Não. Um hash como o SHA-256 não precisa de chave, então qualquer um pode recalculá-lo depois de mudar a mensagem. Um HMAC precisa da chave secreta, então só quem a tem consegue produzir uma assinatura válida.
Por que a assinatura do meu webhook não confere?
Em geral, a mensagem não é, byte a byte, o que foi assinado: um framework leu e reescreveu o JSON, tirou espaços ou mudou a codificação. Assine o corpo bruto exatamente como chegou, e confira se o segredo é o desse endpoint e se o formato da chave está certo.
Devo usar SHA-1?
Só para falar com um sistema que ainda exige. Assinaturas novas usam SHA-256 ou hashes mais longos, e o GitHub, por exemplo, mantém o cabeçalho de assinatura SHA-1 só por compatibilidade.
Minha chave é enviada para algum lugar?
Não. A assinatura é calculada no seu navegador com a API Web Crypto. Mesmo assim, evite colar segredos reais de produção em qualquer site que você não controla: um segredo de teste basta para ver como as assinaturas funcionam.