HMAC exige uma chave além da mensagem
SHA-256 simples calcula o hash dos bytes da mensagem. HMAC-SHA-256 calcula um valor de autenticação a partir de chave e mensagem. A construção do RFC 2104 não é simplesmente colocar a chave antes da mensagem e calcular o hash. A correspondência de um hash sem chave não autentica o remetente por si só.
Reproduza os bytes da chave de teste RFC
O caso 1 do RFC 4231 usa vinte bytes 0x0b e a mensagem Hi There. O código abaixo importa uma chave HMAC do Web Crypto e exibe o resultado hexadecimal. Repetir o texto 0b vinte vezes gera 40 bytes, outra entrada. Esta é uma chave pública de teste, não um segredo de produção.
A ferramenta do Moyoutil calcula hashes SHA simples e não tem entrada HMAC. Este é um exemplo JavaScript separado, não um sistema completo de login ou verificação de webhooks. Autenticação real exige proteção da chave secreta e verificação correta.
const hex = bytes => Array.from(new Uint8Array(bytes),
n => n.toString(16).padStart(2, '0')).join('');
const keyBytes = new Uint8Array(20).fill(0x0b);
const message = new TextEncoder().encode('Hi There');
const key = await crypto.subtle.importKey(
'raw', keyBytes, {name:'HMAC', hash:'SHA-256'},
false, ['sign']);
const mac = await crypto.subtle.sign('HMAC', key, message);
console.log(hex(mac));
// b0344c61d8db38535ca8afceaf0bf12b
// 881dc200c9833da726e9376c2e32cff7Perguntas frequentes
Posso comparar resultados porque ambos os nomes contêm SHA-256?
Não confunda SHA-256 simples com HMAC-SHA-256. Comparar HMAC exige os mesmos bytes de chave e mensagem e o mesmo algoritmo. Diferencie também representações como hexadecimal e Base64.