Como verificar assinaturas digitais online
Verifique assinaturas HMAC, RSA e ECDSA sobre qualquer payload com chave pública ou segredo compartilhado — útil para integrações de API, JWTs e depuração de webhooks.

Mais utilitários que combinam com este guia:
Por que isso importa
Quando o webhook de um fornecedor falha na sua verificação, quase sempre é: chave errada, algoritmo errado, canonização errada ou encoding errado. Em vez de espalhar console.log no verificador, cole mensagem e assinatura num verificador confiável e compare. Isso diz na hora se o bug está no seu código ou na própria mensagem.
Três cenários reais
Cole JWT, chave pública, escolha RS256/ES256/HS256; veja “válido” ou “inválido”.
Bug isolado no handler
Use a chave RSA pública publicada para confirmar assinatura do binário.
Procedência verificada
Assine o payload com o segredo e compare ao cabeçalho recebido.
Fluxo confirmado
Passo a passo
Abra o verificador de assinatura.
Cole a mensagem
Os bytes exatos assinados. Para JWT é
header.payload; para AWS Sig V4 é a string canônica.Cole a assinatura
Hex ou Base64 — escolha o encoding da fonte. A ferramenta detecta formatos comuns.
Informe a chave
Simétrico: segredo (ou Base64/hex). Assimétrico: chave pública em PEM.
Escolha o algoritmo
HS256/384/512 (HMAC), RS256/512 (RSA-PKCS1), PS256 (RSA-PSS), ES256/384 (ECDSA). Mesmos nomes de alg em JWT.
Leia o veredito
“Válido” ou “Inválido” com motivo em uma linha se inválido (alg incompatível, erro ao ler chave, tamanho errado).
Entradas
Message: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEifQ
Signature: L6S8LWkLzpcREMa8gxaaZbWwLNk0LgcBh6dRQpfIBrI
Key: MyVeryLongSharedSecretValue1234567890
Algorithm: HS256Resultado
Assinatura válida.
Dicas avançadas
- Teste sempre com vetores oficiais do fornecedor. A maioria publica mensagem + assinatura conhecidos para validar o algoritmo.
- Em JWTs, copie o header para confirmar
alg. Ignore tokens não assinados (alg=none) — vetor de ataque. - Prefira PSS em RSA novo. PKCS#1 v1.5 (RS256) ainda vale, mas a comunidade favorece RSASSA-PSS (PS256).
- Atenção à string canônica. Um
\na menos ou nome de header em minúsculas inverte a assinatura. Faça diff contra captura que funciona.
Armadilhas comuns
Erro comum
Chave pública no formato errado
PEM pode ser BEGIN PUBLIC KEY (SPKI) ou BEGIN RSA PUBLIC KEY (PKCS#1). A ferramenta aceita ambos, mas cole a chave pública (não certificado, não privada).
Erro comum
Assinatura Base64URL lida como Base64
Assinaturas JWT usam Base64URL (sem padding, alfabeto -_). Ajuste o encoding ou normalize manualmente.
Erro comum
Nome do algoritmo diferente
sha256WithRSAEncryption no OpenSSL equivale a RS256 em JWT. Escolha o alias certo no dropdown.
Quando esta não é a ferramenta certa
- Emitir certificados — OpenSSL ou sua CA.
- Verificar certificado TLS do servidor — trabalho do navegador; cadeia é bem mais complexa.
- Assinatura de binários de plataforma (Authenticode, Apple Developer ID) — ferramentas específicas.
FAQ
Posso verificar webhook Stripe/GitHub aqui?
Sim. HS256 (HMAC-SHA-256), segredo do dashboard, corpo bruto e valor do cabeçalho como assinatura. O resultado mostra se houve adulteração.
Suporta Ed25519?
Ed25519 está no roadmap. Por ora use CLI como openssl pkeyutl -verify.
Minha chave vai para um servidor?
Não. WebCrypto roda localmente; chaves não saem do processo do navegador.
Próximos passos
- Calcule o lado HMAC no gerador HMAC.
- Faça hash do payload separadamente se o protocolo empilhar HMAC sobre hash do corpo com o gerador de hash.
- Decodifique segmentos JWT com Codificar/decodificar antes de colar a mensagem no verificador.