Gerador de HMAC
Assine mensaje com a chave clave-secreta usando HMAC-SHA-256 e você recebe uma assinatura que começa com fd7e5bf1 e que só quem tem essa chave consegue reproduzir. Confira do mesmo jeito as assinaturas recebidas para detectar mensagens alteradas. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
HMAC é um hash com chave secreta: além de detectar alteração na mensagem, prova que ela veio de quem conhece a chave. Informe mensagem e chave e receba o código na hora — tudo calculado no seu navegador.
O que uma assinatura com chave prova
Um HMAC é uma impressão digital de uma mensagem feita com um segredo que os dois lados compartilham. Um hash comum qualquer pessoa calcula, então ele só mostra que os dados não foram danificados. O HMAC mostra também quem o fez: sem o segredo, ninguém produz uma assinatura que confira. Você escolhe o hash de base, SHA-256, SHA-384 ou SHA-512, e recebe a assinatura em texto hexadecimal ou base64, ou pede a verificação de uma assinatura recebida e obtém válida ou inválida.
Onde as assinaturas HMAC são usadas
Links assinados são um caso comum: um HMAC sobre o endereço e o prazo de validade torna links de download ou de troca de senha à prova de adulteração. Filas de mensagens também usam HMAC para que quem recebe rejeite o que foi alterado no caminho, e serviços o usam para confiar em avisos automáticos de outro sistema. A construção foi formalizada na RFC 2104 em 1996 e padronizada como FIPS 198, e três décadas de análise a deixaram praticamente intacta.
A diferença entre hash e HMAC
Um hash comum qualquer pessoa calcula: se um atacante altera a mensagem, recalcula o hash e pronto, a verificação passa. O HMAC fecha essa brecha misturando uma chave secreta ao cálculo. Sem a chave, não há como produzir a assinatura correta — então um HMAC válido prova duas coisas de uma vez: a mensagem não mudou e quem a enviou conhece o segredo combinado entre as partes.
Depurando uma assinatura que não bate
A chave usada é a do ambiente certo (produção ou teste)? O resultado esperado está em hexadecimal ou em Base64? Recalcular aqui, com controle total dos parâmetros, ajuda a isolar qual peça do seu código está fora do lugar.
Perguntas frequentes
A chave que eu colo aqui é enviada para algum lugar?
Não — o cálculo acontece no seu navegador e nada sai da página. Ainda assim, vale a boa prática universal: sempre que possível, teste com chaves de homologação, não com o segredo de produção.
Qual algoritmo de HMAC devo usar?
HMAC com SHA-256 é o padrão de mercado atual e a escolha certa para integrações novas. Se a documentação do serviço com que você integra exigir outra variante, siga o que ela pede — assinatura só funciona com os dois lados usando exatamente o mesmo algoritmo.
HMAC criptografa a mensagem?
Não. A mensagem continua legível para qualquer um que a intercepte; o HMAC apenas prova origem e integridade. Para esconder o conteúdo é preciso criptografar — são proteções diferentes que costumam andar juntas.
Preciso criar conta para testar?
Não — a ferramenta da página funciona sem cadastro, no computador ou no celular.
Qual é a diferença entre um hash e um HMAC?
Um hash comum, como o SHA-256, prova que a mensagem não foi corrompida, mas qualquer pessoa pode calculá-lo, inclusive quem falsifica uma mensagem. O HMAC mistura um segredo compartilhado no cálculo, então só quem tem esse segredo produz uma assinatura que confere.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/dev/hmac \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"payload","secret":"s3cr3t"}'const res = await fetch("https://api.kit.forhosting.com/dev/hmac", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "payload",
"secret": "s3cr3t"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/hmac",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "payload",
"secret": "s3cr3t"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/hmac", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"payload","secret":"s3cr3t"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"payload","secret":"s3cr3t"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/hmac", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"text": "payload",
"secret": "s3cr3t"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.hmac",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
É o mecanismo por trás da assinatura de webhooks e APIs.
Onde você esbarra em HMAC no dia a dia
O mesmo padrão aparece em APIs bancárias, em integrações de e-commerce e em qualquer troca de mensagens entre sistemas em que confiar cegamente no remetente sairia caro. Praticamente todo gateway de pagamento assina os webhooks que envia com HMAC: chega uma notificação de pagamento aprovado, e o seu sistema precisa recalcular a assinatura para ter certeza de que ela veio do gateway, não de alguém forjando confirmações.
Depurando uma assinatura que não bate
O caso clássico: você recalcula o HMAC do webhook e o valor não confere com o header. Antes de suspeitar de fraude, verifique os suspeitos de sempre — o corpo foi lido byte a byte, sem reformatar o JSON?
Sua chave secreta fica onde deve: com você
Esta página calcula tudo localmente, dentro do navegador — a chave e a mensagem não são enviadas a servidor algum, nem ficam registradas em lugar nenhum. Para automatizar a assinatura ou a validação dentro de um sistema, a mesma operação existe via API por US$ 0,002 por chamada; nesse caso a chave viaja na própria requisição e não é armazenada.
Casos de integração
Validar webhook de gateway de pagamento
A TecnoSul Soluções Digitais integra um gateway que assina cada notificação. Durante o desenvolvimento, o time recalcula o HMAC de payloads de teste aqui e confere se a implementação valida do jeito certo.
Assinar chamadas para a API de um parceiro
Um marketplace exige que cada requisição venha assinada com HMAC do corpo. Antes de codificar, o dev gera a assinatura manualmente e compara com o exemplo da documentação do parceiro.
Descobrir por que a integração rejeita mensagens
Depois de uma atualização, as notificações passaram a ser rejeitadas. Recalculando o HMAC fora do sistema, o time descobre que a nova versão reformatava o JSON antes de validar — mudando os bytes e, com eles, a assinatura.
Perguntas técnicas
Por que minha assinatura não bate com a do webhook?
Quase sempre é detalhe de encoding: o corpo foi alterado antes do cálculo, a chave é do ambiente errado, ou um lado compara em hexadecimal e o outro em Base64. Recalcule aqui controlando cada parâmetro para achar a diferença.
Quanto custa assinar requisições via API?
US$ 0,002 por chamada, preço publicado. Não há mensalidade nem pacote mínimo; a compra é direta, sem cadastro, e o pagamento é feito por PayPal.