🧰 UtlKit

Como Usar o Gerador HMAC: Assinaturas SHA-256, SHA-384 e SHA-512 de Chaves de Texto ou Hexadecimais, no Navegador

Uma mensagem e um segredo, lidos como texto UTF-8 ou hexadecimal puro, assinados com SHA-256, SHA-384 ou SHA-512 para um resumo em hexadecimal ou Base64, tudo calculado no navegador via WebCrypto.

O Gerador HMAC assina uma mensagem com uma chave secreta e imprime o resumo com chave. O cálculo inteiro é uma chamada WebCrypto no navegador: a mensagem e a chave ficam na página, nada é enviado a nenhum servidor, e o resultado é uma string determinística que você pode colar em um cabeçalho de requisição, um parâmetro de consulta ou um vetor de teste. Comece no Gerador HMAC, digite The quick brown fox jumps over the lazy dog como mensagem, digite key como segredo, mantenha SHA-256 e Hex selecionados e pressione Gerar: o resumo imprime f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8.

Os quatro controles

Quatro entradas dirigem o resumo: a caixa de mensagem, a caixa de chave secreta com seu alternador Text/Hex, a seleção de algoritmo e a seleção de formato de saída. A mensagem é uma área de texto de várias linhas: as quebras de linha fazem parte da mensagem e são assinadas, então as mesmas palavras em duas linhas assinam diferente das mesmas palavras unidas por um espaço, e os bytes UTF-8 de 你好 assinam como 309b75c0cbbfb27bb35b8d7b8f4adb4b9399cd54339ab5faeb8798e1b9f7f00c sob a chave key. A chave secreta é uma caixa de uma linha, e seu alternador decide como a string é lida. A seleção de algoritmo oferece SHA-256, SHA-384 e SHA-512, e a de formato oferece Hex e Base64. Gerar é um botão explícito: nada é calculado até ele ser pressionado, e o resumo aparece em uma caixa de somente leitura com um botão de copiar ao lado.

Chaves de texto e chaves hexadecimais

No modo Text a chave é lida como os bytes UTF-8 exatamente como digitados: cada caractere faz parte da chave, incluindo um espaço final, então a chave key assina abc como 9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab, enquanto key com um espaço final assina o mesmo abc como 0324ef70f9e605e123731b458dcdce99cf5f8d23572f604fbdabf371aedb0f68. No modo Hex a string é primeiro despojada de todo espaço em branco e depois lida como pares de bytes puros, então 616263 são os três bytes 0x61, 0x62 e 0x63, não os seis caracteres do texto 616263: sob a mensagem msg a chave hex 616263 assina como eb14f17c9f056479f147adcf8020d27914f1e5971f049e75bf21a669cbd747e2, enquanto a chave de texto 616263 assina como 49962d2f0cde29c6a4848f8ea64575424ad42d3d108452127c0512cb88444a41. A string hex deve ter pelo menos dois caracteres, comprimento par, e todos os caracteres dígitos hexadecimais; 6162635 cai na verificação antes de qualquer criptografia rodar, assim como comprimentos ímpares e letras fora de a a f.

Os três algoritmos

O comprimento do resumo é fixado pelo algoritmo: SHA-256 imprime 32 bytes, que são 64 caracteres hex ou 44 caracteres Base64 com um = de padding; SHA-384 imprime 48 bytes, 96 caracteres hex ou 64 caracteres Base64 sem padding; SHA-512 imprime 64 bytes, 128 caracteres hex ou 88 caracteres Base64 com padding duplo. Os três são a mesma construção com chave sobre três funções hash, então alternar a seleção muda o comprimento e o valor, não a forma da entrada. A ferramenta reproduz os vetores de teste da RFC 4231: com a chave hex 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b e a mensagem Hi There, SHA-256 imprime b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7 e SHA-512 imprime 87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854, e com a chave de texto Jefe e a mensagem what do ya want for breakfast?, SHA-256 imprime 47f69d8f80f0a6326746beec23a9040fd533642b5ba38a99287670639d8b862a.

Hex e Base64

Hex imprime o resumo byte a byte em minúsculas, dois caracteres por byte, e Base64 imprime os mesmos bytes com padding padrão. As duas notações carregam os mesmos 32 bytes: a mensagem fox sob a chave key é f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8 em Hex e 97yD9DBThCSxMpjmqm+xQ+9NWaFJRhdZl0edvC0aPNg= em Base64, o = final sendo padding e não um caractere assinado. A mensagem Jefe imprime R/adj4DwpjJnRr7sI6kED9UzZCtbo4qZKHZwY52Lhio= sob SHA-256, MxTAcsyrQOuSUFsKlh1Gv2UuDowpCJfZzsFDvCo65FGJ15G5QCeCSey3RFF3dIlG sob SHA-384, onde os 48 bytes enchem os grupos Base64 exatamente e nenhum padding aparece, e af7nmi5sP0zyOeCqttVBl2h4BIXw5B/8dZckor99FGR+CncEsWts5Zi2pWU1HIhhnQ3+0nKMj8+Ja0GvkB1UCA== sob SHA-512, onde os 64 bytes deixam um byte no último grupo e o duplo = o completa. O botão de copiar coloca a string impressa na área de transferência e lê Copiado por dois segundos.

Determinismo e as verificações de entrada

A mesma mensagem, chave e algoritmo imprimem sempre o mesmo resumo: não há sal, nem timestamp nem aleatoriedade, e essa é a propriedade que torna o HMAC utilizável como vetor de teste e como verificação compartilhada entre dois sistemas. Duas entradas são recusadas antes de qualquer criptografia rodar: uma mensagem vazia ou só de espaços em branco levanta o erro de mensagem, e uma chave vazia ou só de espaços em branco levanta o erro de chave; uma chave hex que cai na verificação hex levanta o erro de hex inválido, e nos três casos as caixas guardam seu conteúdo para correção. O comprimento da chave não tem outra restrição: uma chave de um único byte assina abc como df55998f9fc33d78ac99d1d8ebc2b6e16aa076c4189946942a82b55d5dee8dc7, e uma chave de 100 bytes assina o mesmo abc como 30f0f7f4a3d31b9750666b038c048550020795dd2743759bf83bcf5e0f125b36, porque a construção HMAC primeiro faz o hash de uma chave longa demais até o tamanho do hash. Fica um canto de plataforma: a API subtle da WebCrypto só existe em contextos seguros, então em uma página servida por http plano, o botão levanta o erro de falha em vez de calcular.

O que não é

O Gerador HMAC não é uma ferramenta de hash puro: para um resumo da mensagem sozinha, sem nenhuma chave, o Gerador de Hash roda MD5, SHA-1 e a família SHA-2 sobre o texto. Também não é uma ferramenta JWT: para ler, dividir e decodificar em Base64 um token em vez de assiná-lo, o Decodificador JWT faz isso. E não cifra: o resumo é uma assinatura, não um recipiente de segredos, e a guia AES cobre a direção de cifra. E não guarda estado além das quatro entradas: não há histórico, nem chave guardada nem memória de um resumo anterior, e fechar a página descarta a mensagem e o segredo.

Ferramentas Relacionadas

Perguntas Frequentes

O Gerador HMAC envia a mensagem ou a chave para um servidor?

Não. O resumo é calculado na página pela API WebCrypto do navegador a partir das duas caixas e das duas seleções. Os bytes da mensagem, os bytes da chave e o resultado ficam todos na página; pressionar Gerar não faz nenhuma requisição de rede, e a única coisa que sai da página é uma cópia que você faz do resumo impresso.

Por que as mesmas palavras dão resumos diferentes?

Porque o modo da chave lê a string de maneira diferente. A chave de texto 616263 são seis caracteres UTF-8 e assina a mensagem msg como 49962d2f0cde29c6a4848f8ea64575424ad42d3d108452127c0512cb88444a41, enquanto a chave hex 616263 são três bytes puros e assina a mesma mensagem como eb14f17c9f056479f147adcf8020d27914f1e5971f049e75bf21a669cbd747e2. O espaço pesa o mesmo no modo texto: uma chave com um espaço final assina abc como 0324ef70f9e605e123731b458dcdce99cf5f8d23572f604fbdabf371aedb0f68, diferente da mesma chave sem o espaço.

Por que a chave hex 6162635 é recusada?

A verificação hex roda antes de qualquer criptografia: a string, sem espaços em branco, deve ter pelo menos dois caracteres, comprimento par, e cada caractere um dígito hexadecimais. 6162635 tem sete caracteres, comprimento ímpar, então levanta o erro de hex inválido; uma string com uma letra fora de a a f, ou um único caractere, cai na mesma verificação. O erro não limpa a caixa.

Pressionar Gerar duas vezes imprime dois resumos diferentes?

Não. O HMAC é determinístico: a mesma mensagem, chave, algoritmo e formato imprimem sempre a mesma string, porque a construção não tem sal, nem timestamp nem aleatoriedade. Essa é a propriedade que deixa dois sistemas com um segredo compartilhado se verificarem mutuamente, e a razão pela qual o valor impresso pode ser colado como vetor de teste.

Qual de SHA-256, SHA-384 e SHA-512 devo escolher?

O algoritmo é um contrato com o verificador: escolha o que a parte contrária ou a especificação espera, porque uma assinatura verificada contra o hash errado não vai bater. Os três diferem no comprimento da saída, 32, 48 e 64 bytes, e na função hash dentro da construção com chave. Escolhendo livremente, SHA-256 é o padrão mais comum, e SHA-512 dá o resumo mais longo.

Artigos Relacionados