Como usar
- Digite os dados em Mensagem. Para dados binários, escolha Hexadecimal ou Base64 em Codificação da mensagem.
- Digite o segredo em Chave e escolha como ele está escrito em Codificação da chave.
- Leia as quatro linhas de Valores de HMAC. Copie o valor de que precisa, ou compare-o com o valor que seu sistema gera.
- Se os valores forem diferentes dos de outro sistema, confira os bytes primeiro: uma quebra de linha ou uma codificação diferente gera outro HMAC.
O que é um HMAC
Um HMAC (RFC 2104) é um código de autenticação de mensagem: um valor curto que só quem conhece a chave secreta consegue gerar. Ele é construído a partir de uma função de hash comum H, aplicada duas vezes à mensagem e à chave, então a mesma função pode ser usada nas quatro linhas da tabela. Como a chave é necessária, um HMAC que confere mostra que a mensagem não foi alterada e que veio de quem tem a chave.
Um HMAC não esconde a mensagem. Qualquer pessoa que tenha a mensagem pode lê-la; o HMAC só permite conferi-la.
HMAC(K, m) = H((K XOR opad) || H((K XOR ipad) || m))
ipad = o byte 0x36 repetido B vezes
opad = o byte 0x5C repetido B vezes
B = o tamanho do bloco de H: 64 bytes para SHA-1 e SHA-256, 128 bytes para SHA-384 e SHA-512
Qual hash e qual chave
HMAC-SHA-256 é a escolha usual, e a que muitos webhooks e APIs usam. HMAC-SHA-512 é a mesma construção com uma saída mais longa. HMAC-SHA-1 ainda aparece em sistemas antigos, e não é uma escolha para projetos novos.
A chave deve ser aleatória e ter pelo menos o tamanho da saída do hash. Uma chave digitada como palavra ou frase curta é fácil de adivinhar, e uma chave adivinhada torna o HMAC sem valor.
Hexadecimal e Base64
As duas formas mostram os mesmos bytes. A hexadecimal escreve cada byte com dois dígitos, então o SHA-256 tem 64 dígitos. O Base64 escreve três bytes com quatro caracteres, então o SHA-256 tem 44 caracteres, o último deles um = de preenchimento (RFC 4648).
- HMAC-SHA-1: 40 dígitos hexadecimais, 28 caracteres Base64
- HMAC-SHA-256: 64 dígitos hexadecimais, 44 caracteres Base64
- HMAC-SHA-384: 96 dígitos hexadecimais, 64 caracteres Base64
- HMAC-SHA-512: 128 dígitos hexadecimais, 88 caracteres Base64
Exemplo resolvido: caso de teste 2 da RFC 4231
A chave Jefe e a mensagem what do ya want for nothing? são o segundo caso de teste da RFC 4231 para SHA-256, SHA-384 e SHA-512, e da RFC 2202 para SHA-1. A tabela abaixo é o que a página mostra para eles, e o valor de HMAC-SHA-256 é o que a RFC imprime: 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843.
| Algoritmo | Hexadecimal | Base64 |
|---|---|---|
| HMAC-SHA-1 | effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 | 7/zfauXrL6LSdBbV8YTfnCWafHk= |
| HMAC-SHA-256 | 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 | W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM= |
| HMAC-SHA-384 | af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649 | r0XS43ZIQDFhf3jStYprG5x+9GT1oBtH5C7Dc2MiRF6OIkDKXmnix4syOez6shZJ |
| HMAC-SHA-512 | 164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737 | Fkt6e/z4GeLjlfvnO1bgo4e9ZCIugx/WECcM1+olBVSXWL91wFqZSm0DT2X48Ob9yuqxo01Ka0tjbgcKOLznNw== |
Perguntas frequentes
Um HMAC é o mesmo que criptografar a mensagem?
Não. Um HMAC não esconde a mensagem, então qualquer pessoa pode lê-la. Ele mostra que a mensagem não foi alterada e que quem a enviou conhece a chave. Para sigilo, é preciso criptografia.
Qual é a diferença entre um hash e um HMAC?
Um hash depende só da mensagem, então qualquer pessoa pode calculá-lo. Um HMAC também precisa da chave secreta, então só quem tem a chave consegue gerá-lo ou conferi-lo. Para resumos simples, use o gerador de hash.
Por que meu HMAC é diferente do que minha biblioteca gera?
A chave ou os bytes da mensagem são diferentes. Uma chave digitada como texto são os seus bytes UTF-8, e as mesmas letras escritas em hexadecimal são outros bytes. Uma quebra de linha no fim da mensagem também muda o HMAC.
Que tamanho de chave devo usar?
Use uma chave aleatória com pelo menos o tamanho da saída do hash: 32 bytes para HMAC-SHA-256. A RFC 2104 desaconselha fortemente uma chave menor, e uma chave feita de palavras ou de uma frase curta é fácil de adivinhar.
Posso conferir a assinatura de um webhook com esta página?
Sim, se você usar exatamente os bytes que foram assinados. As assinaturas de webhook costumam ser calculadas sobre o corpo bruto da requisição, então cole o corpo sem alterações: um JSON reformatado gera outro HMAC.
Minha chave ou mensagem é enviada para algum lugar?
Não. O HMAC é calculado no seu navegador com o SubtleCrypto do próprio navegador. A chave e a mensagem não são enviadas nem guardadas.
Fontes
- RFC 2104 (em inglês): HMAC: Keyed-Hashing for Message Authentication
- RFC 4231 (em inglês): Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384 and HMAC-SHA-512
- RFC 2202 (em inglês): Test Cases for HMAC-MD5 and HMAC-SHA-1
- RFC 4648 (em inglês): The Base16, Base32, and Base64 Data Encodings
- NIST FIPS 180-4 (em inglês): Secure Hash Standard (SHA-1 and the SHA-2 family)
Números e texto verificados pela última vez em terça-feira, 10 de novembro de 2026.