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.

O formulário interativo fica disponível quando o JavaScript está ativo.

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.

Ferramentas relacionadas