Como gerar um HMAC
Introduza o segredo partilhado e a mensagem exatamente como o protocolo define, selecione SHA-2 e a codificação e gere. Espaço, quebra ou codificação diferente altera o código.
- Cole a chave literal só quando o protocolo disser texto UTF-8; uma chave Hex ou Base64 normalmente representa bytes e precisa ser descodificada.
- Cole os dados exatos, incluindo quebras, separadores, timestamp e representação canónica.
- Escolha SHA-256, SHA-384 ou SHA-512 e Hex ou Base64 conforme o protocolo.
- Gere, compare o código completo e limpe chave e área de transferência ao terminar.
Exemplos e comportamento esperado
| Entrada | Saída | Observações |
|---|---|---|
Chave: Jefe
Dados: what do ya want for nothing?
HMAC-SHA-256 |
5bdcc146bf60754e6a042426089575c75… |
Vetor RFC 4231, caso 2. |
Chave secret
Dados message |
HMAC determinístico |
Mesmos bytes, algoritmo e codificação geram o mesmo valor. |
Chave secret
Dados Message |
HMAC diferente |
Mudar maiúsculas altera os bytes. |
Chave segredo
Dados Olá 👋 |
HMAC UTF-8 |
Carateres internacionais são codificados em UTF-8. |
Saída Hex |
Dois carateres por byte |
HMAC-SHA-256 tem 64 carateres Hex. |
Saída Base64 |
Base64 dos mesmos bytes |
A codificação não muda o resultado criptográfico. |
O que HMAC oferece
HMAC combina chave secreta com função hash. Quem possui a mesma chave pode recomputar e detetar alterações; um terceiro sem chave não deve conseguir autenticar mensagem modificada.
Oferece integridade e autenticidade partilhada, não encriptação. A mensagem continua legível e não há não repúdio, pois todos os detentores da chave geram códigos. Para verificação pública, use assinaturas digitais.
- HMAC-SHA-256 usa SHA-256 dentro da construção.
- O comprimento corresponde ao hash subjacente.
- Confidencialidade exige criptografia separada.
Representação e gestão de chaves
O campo é interpretado como texto UTF-8. Uma cadeia de texto Hex ou Base64 normalmente codifica bytes de chave; usar os carateres literalmente produz outro HMAC. Descodifique conforme o protocolo ou use ferramenta com opção de codificação da chave.
Segurança depende de entropia, armazenamento e rotação. Use chaves aleatórias, gestor de segredos, acesso mínimo, identificadores e revogação. Não as coloque em repositórios nem tickets.
- Diferencie bytes crus de texto codificado.
- Evite palavras-passe escolhidas por pessoas como chave direta.
- Planeie a rotação de segredos de webhooks.
Bytes canónicos e UTF-8
HMAC autentica bytes. Quebras, espaços, normalização Unicode, ordem JSON, URL encoding ou formato de timestamp mudam o resultado. Reformatar JSON antes de verificar normalmente quebra a assinatura.
Use o corpo bruto ou a cadeia de texto exata definida, com separadores e zeros iniciais. Não converta segundos em milissegundos sem uma regra do protocolo. A maioria das falhas de integração é normalização canónica.
- CRLF e LF são diferentes.
- Quebra final muda o código.
- Unicode visualmente igual pode ter outra normalização.
Algoritmo e codificação
São suportados HMAC-SHA-256, 384 e 512. Use o algoritmo exigido. SHA-256 é comum, mas novos desenhos devem seguir padrão revisado.
Hexadecimal e Base64 representam os mesmos bytes. Base64 padrão não é Base64url. Siga exatamente o alfabeto, o preenchimento e a utilização esperada de maiúsculas e minúsculas.
- HMAC-SHA-256 produz 32 bytes.
- A utilização de maiúsculas no hexadecimal depende do protocolo.
- Base64 padrão usa +, / e padding.
Verificação de webhooks e APIs
Um verificador robusto lê o corpo bruto, extrai o tempo e o identificador da chave, reconstrói a mensagem, calcula o HMAC e compara em tempo constante. Também valida a atualidade e impede a reutilização.
Esta página serve para vetores e depuração, não como endpoint. Não exponha segredos de produção em sessão partilhada; verifique no servidor antes de ações.
- Verifique bytes brutos quando exigido.
- Rejeite timestamps antigos.
- Compare em tempo constante.
- Selecione a chave por ID na rotação.
Erros, limites e manejo seguro
Chave vazia é rejeitada e Web Crypto é obrigatório. Chave e mensagem ficam no estado da página, sem persistência intencional. Limpar não apaga gestores de área de transferência nem gravações.
Apenas texto é aceite, não chaves binárias ou ficheiros. Não deriva chaves, trunca etiquetas, compara ou gere replay. Para segredos muito sensíveis use ambiente local auditado.
- Não cole segredos reais em dispositivos partilhados.
- Limpe a área de transferência.
- Não trunque HMAC sem definição do protocolo.
Diferenças para hash e criptografia
Hash simples não tem chave. HMAC é construção padrão e não deve ser substituído por hash(chave || mensagem), que pode ter fraquezas estruturais.
Criptografia oculta conteúdo; HMAC autentica, mas não oculta. Use criptografia autenticada revisada quando precisar das duas propriedades.