Gerador de HMAC-SHA256
Crie uma assinatura HMAC-SHA256 a partir de uma mensagem e uma chave secreta. A ferramenta codifica ambas em UTF-8, aplica a construção HMAC da RFC 2104 com SHA-256 e retorna a etiqueta de 256 bits em hexadecimal ou Base64. Desenvolvedores usam a ferramenta para depurar assinaturas de webhook de serviços como Stripe, GitHub ou Slack, assinar solicitações API e comparar os resultados com o próprio código. A chave nunca é retornada nem registrada.
Perguntas frequentes
O que é HMAC-SHA256?
HMAC-SHA256 é um código de autenticação de mensagem criado com SHA-256 e uma chave secreta, conforme definido na RFC 2104. Somente quem possui a chave pode calcular a etiqueta correta para uma mensagem. O resultado tem 32 bytes ou 64 caracteres hexadecimais.
Como verifico uma assinatura de webhook?
Cole o corpo bruto exato da solicitação como mensagem e o segredo de assinatura como chave; em seguida, compare o resultado com o cabeçalho da assinatura. Muitos serviços assinam uma combinação, como o carimbo de data e hora do Stripe, um ponto e o corpo, então monte a mensagem conforme descrito na documentação do serviço. Uma única alteração de byte produz uma etiqueta diferente.
Existe um vetor de teste conhecido?
O caso de teste 2 da RFC 4231 usa a chave Jefe e a mensagem what do ya want for nothing? e espera 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843. Esta ferramenta retorna exatamente esse valor.
Como a chave e a mensagem são codificadas?
Ambas são codificadas como texto UTF-8. Se o segredo for fornecido em hexadecimal ou Base64, como acontece em alguns serviços, os bytes serão diferentes do texto exibido, e você precisará decodificar a chave no próprio código. Espaços em branco e quebras de linha contam nos dois campos.
Minha chave secreta é armazenada?
Não. A chave é usada apenas para calcular a etiqueta durante a solicitação. Ela não é incluída na resposta, registrada nem armazenada.
A chave pode ser vazia ou muito longa?
O HMAC aceita chaves de qualquer tamanho, inclusive uma chave vazia. Chaves com mais de 64 bytes são primeiro processadas com SHA-256, conforme especificado pela RFC. Para uso real, escolha uma chave aleatória de pelo menos 32 bytes.
Devo escolher hexadecimal ou Base64?
Use o formato enviado pela outra parte. GitHub e Stripe usam hexadecimal, enquanto Slack prefixa o hexadecimal com v0= e muitos sistemas baseados em AWS e JWT usam Base64. Ambos codificam os mesmos 32 bytes.
HMAC-SHA256 é igual ao SHA-256 da chave concatenada com a mensagem?
Não. O HMAC calcula o hash da mensagem duas vezes, com chaves preenchidas internas e externas, o que protege contra ataques de extensão de comprimento. Concatenar a chave e a mensagem e calcular o hash uma vez produz um resultado diferente e mais fraco.
Como devo comparar assinaturas no meu código?
Use uma função de comparação em tempo constante, como crypto.timingSafeEqual em Node.js ou hmac.compare_digest em Python. Uma comparação normal de strings pode revelar informações temporais sobre a etiqueta esperada.
Qual pode ser o tamanho da mensagem?
A mensagem e a chave podem somar até 5 MiB de texto. Isso cobre cargas úteis típicas de webhook e solicitações API.