HMAC Generator

Calcule a assinatura HMAC de um payload com sua secret key para validar webhooks, assinar requisições de API e depurar divergências de assinatura.

Payload e chave

HMAC-SHA-256

Informe uma secret key

Usar via API

Assina uma mensagem com HMAC.

POSThttps://enhanced.dev.br/api/v1/crypto/hmac
Parâmetros do corpo JSON
Corpo (JSON)TipoDescrição
message *stringPayload exatamente como será assinado.
secret *stringChave secreta (UTF-8).
algorithm"SHA-1" | "SHA-256" | "SHA-384" | "SHA-512"Padrão: "SHA-256".
encoding"hex" | "base64"Padrão: "hex".

Exemplo de requisição

curl -X POST "https://enhanced.dev.br/api/v1/crypto/hmac" \
    -H "Content-Type: application/json" \
    -d '{"message":"{\"event\":\"payment.succeeded\"}","secret":"whsec_minha_chave","algorithm":"SHA-256","encoding":"hex"}'

Resposta

{
  "ok": true,
  "data": {
    "algorithm": "SHA-256",
    "encoding": "hex",
    "signature": "2c5a750a657f62b38efa49ac2ee65ba334dd76a104bca7910039f9e900aff576"
  },
  "meta": {
    "version": "v1"
  }
}
  • Erros retornam { ok: false, error: { code, message } } com status HTTP 4xx/5xx.
  • Gratuita e sem chave de API. Limite de 120 requisições por minuto por IP.
  • CORS liberado: pode ser chamada direto do navegador em qualquer domínio.

Como usar

  1. Cole o payload exatamente como foi recebido ou será enviado.
  2. Informe a secret key.
  3. Escolha o algoritmo (HMAC-SHA256 é o mais comum).
  4. Selecione hex ou Base64 conforme o formato esperado pelo serviço e copie.

Casos de uso

  • Validar assinaturas de webhooks de Stripe, GitHub, Shopify e gateways de pagamento.
  • Assinar requisições entre microsserviços.
  • Investigar por que a assinatura calculada no backend não confere.

Conceitos técnicos

Como o HMAC funciona

HMAC (RFC 2104) combina uma função hash com uma chave secreta: H((K ⊕ opad) || H((K ⊕ ipad) || mensagem)). Só quem conhece a chave produz a assinatura correta, o que garante autenticidade e integridade da mensagem.

Byte a byte

A assinatura depende de cada byte do payload. Reformatar o JSON, trocar a ordem das chaves ou alterar quebras de linha gera outra assinatura. Sempre assine o corpo bruto da requisição, antes de qualquer parse.

Comparação em tempo constante

No servidor, compare assinaturas com funções de tempo constante (crypto.timingSafeEqual no Node, hmac.compare_digest no Python) para evitar ataques de timing.

Perguntas frequentes

Minha secret key fica salva?

Não. A chave existe apenas na memória da página e é usada pela Web Crypto API local.

Por que minha assinatura não bate com a do serviço?

As causas mais comuns são payload alterado por parse, encoding de saída diferente (hex vs Base64) e prefixos como sha256= ou timestamps que o serviço concatena antes de assinar.

HMAC-SHA1 ainda é seguro?

Sim para HMAC: as colisões do SHA-1 não quebram a construção HMAC na prática. Mesmo assim, prefira SHA-256 em novos sistemas.

Ferramentas relacionadas