Como usar
- Insira a chave secreta e escolha se ela está em texto simples ou em bytes hexadecimais.
- Cole a mensagem, por exemplo, o conteúdo de um webhook exatamente como foi recebido.
- Escolha o algoritmo e a codificação de saída usados pelo seu serviço; o HMAC é atualizado enquanto você digita.
- Para conferir uma assinatura, cole-a no campo de verificação e procure por “Corresponde”.
Como funciona
HMAC (RFC 2104) combina uma chave secreta com uma função de hash para gerar uma assinatura que só alguém com a chave pode criar. Serviços como webhooks e solicitações de API assinadas enviam um HMAC com cada mensagem para que o destinatário possa verificar se ela é autêntica e não foi alterada.
Esta ferramenta usa a Web Crypto API do seu navegador (crypto.subtle.importKey e sign) e é validada com os vetores de teste RFC 4231 e RFC 2202. A chave de texto e a mensagem são codificadas em UTF-8. Uma chave hexadecimal é decodificada em bytes brutos; espaços, dois-pontos e um 0x no início são ignorados. HMAC-SHA-256 é a opção mais comum; HMAC-SHA-1 ainda é considerado seguro como MAC, mas é usado principalmente por APIs mais antigas.
Se sua assinatura não corresponder, confira os detalhes que mais costumam variar: os bytes exatos da mensagem (muitos provedores de webhook assinam o corpo bruto, não o JSON reformatado), um registro de data e hora ou prefixo que o provedor adiciona à string assinada, se a chave deve ser usada como texto ou primeiro decodificada de hexadecimal ou Base64 e se a assinatura esperada está em hexadecimal ou Base64 e tem um prefixo como “sha256=”, que deve ser removido antes da comparação.
Exemplos
Caso de teste RFC 4231
A chave “Jefe” (texto), a mensagem “what do ya want for nothing?” e HMAC-SHA-256 geram 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Use “Testar um exemplo” para carregar esses dados.
Verificar a assinatura de um webhook
Um provedor envia o cabeçalho X-Signature: sha256=… com cada solicitação. Cole o corpo bruto da solicitação como mensagem, use o segredo do webhook como chave, selecione HMAC-SHA-256 e Hex e cole no campo de verificação o valor que vem depois de “sha256=”.
Uma chave codificada em hexadecimal
Alguns sistemas fornecem chaves como strings hexadecimais, por exemplo 0b0b0b…. Selecione Hex como formato da chave para que a ferramenta assine usando os bytes decodificados; tratar a mesma string como texto gera um resultado completamente diferente.
Perguntas frequentes
Qual é a diferença entre um HMAC e um hash simples?
Qualquer pessoa pode calcular o hash simples de uma mensagem, como SHA-256. Um HMAC também depende de uma chave secreta, então só alguém com essa chave pode gerá-lo ou verificá-lo. Isso comprova que a mensagem veio de alguém que possui a chave e não foi alterada.
Por que meu HMAC é diferente do gerado pelo servidor?
Quase sempre, os bytes de entrada são diferentes: quebras de linha, espaços em branco, ordem das chaves do JSON, codificação de caracteres ou uma chave que deveria ser decodificada de hexadecimal ou Base64. Compare também usando a mesma codificação (hexadecimal ou Base64) e remova prefixos como “sha256=”.
Minha chave secreta é enviada para algum lugar?
Não. A chave e a mensagem são usadas apenas pela Web Crypto API nesta aba do navegador. Elas não são enviadas, armazenadas nem incluídas em ferramentas de análise.
O HMAC-SHA-1 ainda é seguro?
Colisões em SHA-1 não comprometem diretamente o HMAC-SHA-1, que ainda é aceito por compatibilidade. Para novos sistemas, use HMAC-SHA-256 ou uma versão mais forte.
Privacidade
A chave, a mensagem e o resultado existem apenas nesta aba do navegador. Nada é enviado, armazenado ou encaminhado para ferramentas de análise; somente é registrado um evento anônimo indicando que a ferramenta foi usada.