HMAC necesita una clave además del mensaje
SHA-256 simple calcula el hash de los bytes del mensaje. HMAC-SHA-256 calcula un valor de autenticación con una clave y un mensaje. La construcción de RFC 2104 no consiste simplemente en anteponer la clave al mensaje y calcular su hash. Un hash sin clave coincidente no autentica por sí solo al remitente.
Reproduce los bytes de la clave de prueba RFC
El caso 1 de RFC 4231 utiliza veinte bytes 0x0b y el mensaje Hi There. El código siguiente importa una clave HMAC de Web Crypto y muestra el resultado hexadecimal. Repetir el texto 0b veinte veces produce 40 bytes, una entrada diferente. Es una clave pública de prueba, no un secreto de producción.
La herramienta de Moyoutil calcula hashes SHA simples y no tiene entrada HMAC. Este es un ejemplo JavaScript independiente, no un sistema completo de acceso o verificación de webhooks. La autenticación real requiere proteger la clave secreta y verificar correctamente.
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
// 881dc200c9833da726e9376c2e32cff7Preguntas frecuentes
¿Puedo comparar resultados porque ambos nombres contienen SHA-256?
No confundas SHA-256 simple con HMAC-SHA-256. Comparar HMAC requiere los mismos bytes de clave y mensaje y el mismo algoritmo. Distingue también representaciones como hexadecimal y Base64.