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.

SHA-256 recibe un mensaje; HMAC-SHA-256 recibe una clave y un mensaje. Ambas salidas tienen 256 bits
M es el mensaje; K es la clave. Diagrama conceptual original de las entradas. Igual longitud no significa iguales valores ni funciones.

RFC 2104 §2: HMAC

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
// 881dc200c9833da726e9376c2e32cff7

RFC 4231 §4.2: Test Case 1

W3C Web Cryptography: HMAC

Preguntas 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.