Gerador HMAC - Criptografar HMAC
Gerador HMAC-SHA256/SHA-512/SHA-1 — assine webhooks, requisições AWS, tokens JWT HS256. Saída hex ou Base64. WebCrypto, 100% navegador.
Gerador HMAC - Gerar Códigos de Autenticação de Mensagem Online
HMAC (Código de Autenticação de Mensagem baseado em Hash) é a primitiva criptográfica que alimenta praticamente todo esquema de autenticação de API em produção: AWS Signature v4, assinaturas de webhook Stripe, segredos de GitHub Actions, verificação de requisições Slack, assinatura de requisições Twilio, callbacks de eventos Mailgun, todo JWT com alg HS256/HS384/HS512, e toda a spec de tokens MAC OAuth 2.0 se reduzem a HMAC em seu núcleo. Padronizado na RFC 2104 (Krawczyk, Bellare, Canetti, 1997) e provado seguro sob suposições padrão sobre o hash subjacente, HMAC recebe duas entradas — uma CHAVE secreta compartilhada e uma MENSAGEM — e produz uma assinatura de tamanho fixo que qualquer um com a chave pode re-derivar e comparar. Isso é fundamentalmente diferente de um hash puro como sha256(mensagem): sem a chave, um atacante pode computar seu próprio sha256 de qualquer mensagem adulterada e substituir a sua; com HMAC, eles não podem forjar uma assinatura correspondente sem conhecer a chave. Este gerador roda a implementação WebCrypto completa do lado cliente e suporta todas as três variantes da família SHA-2 (SHA-256 para a maioria dos usos modernos, SHA-512 para aplicações de alta segurança, SHA-1 para sistemas legacy dos quais você deveria estar migrando), com saída tanto hexadecimal (o formato universal text-safe para cabeçalhos e arquivos de config) quanto base64 (o padrão para assinaturas JWT e muitas APIs auth). Nunca reutilize um segredo entre serviços, nunca o embuta em código do lado cliente, e rotacione periodicamente. Veja também nosso Gerador de Hash SHA-512 e Gerador de Hash MD5.
O que é HMAC?
HMAC (Código de Autenticação de Mensagem baseado em Hash) é um algoritmo criptográfico que combina uma função de hash com uma chave secreta para criar um código de autenticação de mensagem.
Recursos principais:
- Verifica tanto integridade quanto autenticidade dos dados
- Requer chave secreta (compartilhada entre remetente/receptor)
- Baseado em funções de hash padrão (SHA-256, SHA-512, etc.)
- Usado em APIs, JWTs, webhooks e comunicações seguras
HMAC = Hash(chave_secreta + mensagem)
Exemplo:
Mensagem: "Olá, Mundo!"
Secreto: "minhaChaveSecreta"
HMAC-SHA256: (string hexadecimal de 64 caracteres)
Como gerar um HMAC?
1. Digite sua mensagem/dados
2. Digite sua chave secreta
3. Selecione o algoritmo de hash (SHA-256 recomendado)
4. Escolha o formato de saída (hex ou base64)
5. Clique em 'Gerar HMAC'
6. Copie o código HMAC
Exemplo:
Mensagem: "user=joao&action=login"
Chave: "api_secret_key_123"
Algoritmo: HMAC-SHA256
Saída: string hex de 64 caracteres
A mesma mensagem + chave sempre produzirá o mesmo HMAC.
Para que o HMAC é usado?
HMAC é amplamente usado para autenticação segura e verificação de integridade:
✓ Autenticação de API:
- Verificação de assinatura AWS
- Webhooks do GitHub
- Assinatura de solicitação de API
- Assinaturas OAuth
✓ JWT (JSON Web Tokens):
- Algoritmos HS256, HS384, HS512
- Verificação de assinatura de token
✓ Integridade de Mensagem:
- Verificação de payload de webhook
- Detecção de adulteração de dados
- Transmissão segura de mensagem
✓ Gerenciamento de Sessão:
- Assinatura de cookie
- Geração de token CSRF
- Validação de sessão
HMAC garante tanto autenticidade (remetente tem a chave) quanto integridade (mensagem inalterada).
Qual algoritmo HMAC devo usar?
Escolha com base em suas necessidades de segurança:
HMAC-SHA256 (Recomendado):
✓ Padrão da indústria
✓ Rápido e seguro
✓ Saída hex de 64 caracteres
✓ Usado pela maioria das APIs
✓ JWT HS256
HMAC-SHA512 (Mais Seguro):
✓ Segurança máxima
✓ Saída hex de 128 caracteres
✓ Melhor para dados de alto valor
✓ JWT HS512
HMAC-SHA1 (Legado):
⚠️ Descontinuado para novos projetos
✓ Apenas para compatibilidade legada
✓ Saída hex de 40 caracteres
Para a maioria das aplicações: Use HMAC-SHA256
Para segurança máxima: Use HMAC-SHA512
Evite SHA-1 para novos projetos.

Como verifico uma assinatura de webhook Stripe / GitHub / Slack usando HMAC?
Todos os três seguem o mesmo padrão com detalhes diferentes. O provedor de webhook faz POST de um payload JSON ao seu endpoint junto com um cabeçalho contendo uma assinatura HMAC desse payload exato, computada usando um segredo compartilhado que você configurou durante o setup do webhook. Seu trabalho: recompute o HMAC no body recebido e compare com o valor do cabeçalho usando uma comparação de TEMPO CONSTANTE (==, ===, strcmp vazam info de timing; use crypto.timingSafeEqual em Node ou hmac.compare_digest em Python). Se combinarem, a requisição realmente veio do provedor e não foi adulterada em trânsito; se não, rejeite com 401. (1) Stripe: cabeçalho 'Stripe-Signature: t=1234567890,v1=abc...', segredo começa com 'whsec_', algoritmo HMAC-SHA256, payload assinado é timestamp + '.' + body. (2) GitHub: cabeçalho 'X-Hub-Signature-256: sha256=abc...', segredo que você define por repo, HMAC-SHA256 do body bruto. (3) Slack: cabeçalho 'X-Slack-Signature: v0=abc...', signing secret da config do app, HMAC-SHA256 de 'v0:' + timestamp + ':' + body. Sempre também rejeite se o timestamp for mais antigo que 5 minutos para prevenir ataques de replay.
Por que meu HMAC computado em Python não combina com o do Node.js?
Oito em cada dez vezes é uma incompatibilidade de encoding — você está hasheando sequências de bytes diferentes sem perceber. Passe por esta checklist. (1) Encoding da chave: em JavaScript 'Buffer.from(secret)' assume UTF-8 por padrão mas '.from(secret, 'hex')' interpreta a mesma string como bytes hex. Se seu segredo parece '00ff42' pode ser um valor hex de 3 bytes OU uma string UTF-8 de 6 bytes de '00ff42'. (2) Encoding da mensagem: mesmo problema. Serialização JSON deve produzir exatamente os mesmos bytes em ambos os lados — até diferenças de ordem de chave ({a:1,b:2} vs {b:2,a:1}) produzem assinaturas diferentes. A maioria das APIs requer que você assine a sequência de bytes JSON bruta enviada pelo cliente, não uma versão re-serializada. (3) Encoding de saída: hex vs base64 vs base64 URL-safe diferem. (4) Quebras de linha: \n no Linux/Mac mas \r\n no body da requisição vindo de cliente Windows; HMAC os vê como bytes diferentes. (5) Espaços em branco: espaços ao final da mensagem. Solução: imprima os bytes exatos (Buffer.from(...).toString('hex')) em ambos os lados para uma mensagem de teste pequena conhecida até combinarem, depois passe para o payload real.
Posso usar HMAC para senhas?
NÃO! HMAC NÃO é para hash de senha.
HMAC:
✓ Autenticação de mensagem
✓ Assinaturas de API
✓ Integridade de dados
✗ NÃO armazenamento de senha
Para senhas, use:
✓ bcrypt (recomendado)
✓ Argon2 (moderno)
✓ PBKDF2 (aceitável)
Por quê?
- HMAC é rápido (não bom para senhas)
- HMAC precisa de uma chave (senhas são o segredo)
- HMAC não usa salt adequadamente para senhas
HMAC e hash de senha servem a propósitos diferentes!
Principais Recursos
- Gerar HMAC de qualquer mensagem instantaneamente
- Suporte para SHA-256, SHA-512 e SHA-1
- Formato de saída Hexadecimal ou Base64
- Chave secreta com alternância mostrar/ocultar
- API Web Crypto para hash seguro
- Copiar HMAC para área de transferência
- Baixar HMAC como arquivo de texto
- Exibição de informações de algoritmo e saída
- Suporte a modo escuro
- 100% de processamento no cliente
- Funciona offline
- Nenhum registro necessário
