Generador HMAC
CifradoCalcula firmas HMAC-SHA-1/256/384/512 con Web Crypto. Salida Hex o Base64, todo en tu navegador.
No se recuperan URLs remotas; pega tu JSON directamente.
En esta página
¿Qué es HMAC?#
HMAC significa código de autenticación de mensajes basado en hash (Hash-based Message Authentication Code). Un hash plano (como SHA-256) responde a la pregunta «¿cambió este flujo de bytes?». HMAC responde a una más fuerte: «¿cambió este flujo de bytes y lo envió alguien que de verdad comparte mi clave secreta?». La diferencia importa siempre que un mensaje viaja por un canal en el que no confías plenamente: callbacks de webhook, URLs firmadas, firma de peticiones de API, tokens entre servicios.
Mecánicamente, HMAC mezcla una clave secreta en la función hash de una forma definida (dos rondas, con relleno), de modo que el resumen no puede falsificarse sin la clave. La salida es una cadena de bytes de longitud fija cuyo tamaño coincide con el hash subyacente: 20 bytes para SHA-1, 32 para SHA-256, 48 para SHA-384, 64 para SHA-512.
Esta página calcula HMAC en tu navegador con la API Web Crypto. Tú eliges el hash, pegas el mensaje y el secreto, y obtienes el resumen en hex o base64.
Cómo usarlo#
- Escribe o pega el Mensaje: el payload que quieres autenticar. Son los bytes que el receptor hasheará en su lado.
- Introduce la Clave secreta. El campo está enmascarado por defecto; pulsa el botón del ojo a la derecha para mostrarla mientras escribes. Tanto la clave como el mensaje se codifican como UTF-8.
- Elige el Algoritmo:
- SHA-1: 160 bits. Rápido, pero solo adecuado para HMAC heredado (algunos flujos antiguos de firma aún lo exigen). No uses SHA-1 para firmas digitales.
- SHA-256: 256 bits. El valor por defecto moderno; la inmensa mayoría de las firmas de webhook (Stripe, GitHub, flujos estilo Slack) usan HMAC-SHA-256.
- SHA-384 / SHA-512: resúmenes más largos, marginalmente más resistencia a colisiones, algo más lentos. Elige uno cuando el sistema receptor lo requiera explícitamente.
- Elige la codificación de Formato de salida: hex (típica para cabeceras estilo
X-Signature) o base64 (típica cuando el resumen va incrustado en JSON o en un token). - Pulsa Generar. El resumen aparece en el panel derecho; la línea de estado muestra el algoritmo y la longitud en bytes como comprobación de cordura. Copiar se lo lleva.
Características principales#
- Respaldado por Web Crypto. Usa el
crypto.subtlenativo del navegador, la misma primitiva que usa el código de producción, no una reimplementación en JavaScript. - Comprobación de cordura de longitud. Cada resumen se verifica contra la longitud esperada en bytes para su algoritmo, así un resultado truncado o manipulado no puede colarse en silencio.
- Salida hex o base64. Alterna con un clic, sin reescribir.
- El secreto se queda local. El campo de la clave se renderiza como entrada de contraseña y nunca sale de la página: no hay backend.
- Consciente del contexto seguro. Si la página se cargara alguna vez por HTTP simple,
crypto.subtleno está disponible y la herramienta lo indica de forma explícita en vez de producir un resultado equivocado.
Ejemplo detallado#
El par clásico de referencia (RFC 4231) usa una clave Jefe y el mensaje what do ya want for nothing?. Con esta página en SHA-256 y hex, el resumen es:
5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843
Cambia a SHA-512 con las mismas entradas y el resumen dobla su longitud:
164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737
Puedes reproducir ambos aquí mismo: carga Ejemplo y después Generar. Este par exacto es también la forma en que la propia suite de tests de esta herramienta verifica la corrección: si alguna vez obtienes un resumen distinto, algo ha manipulado la página.
Preguntas frecuentes#
SHA-256 o SHA-512, ¿cuál debería usar?#
Para HMAC en concreto, SHA-256 es el valor por defecto pragmático: todos los firmantes importantes de webhooks lo usan, es rápido, y 256 bits de resumen ya están muy por encima del territorio de la fuerza bruta. Pasa a SHA-512 solo cuando (a) el sistema receptor lo requiere, o (b) estás diseñando un protocolo nuevo desde cero y quieres el margen extra de colisión a un coste de velocidad modesto. Evita SHA-1 por completo salvo que estés coincidiendo con un sistema heredado que lo exija.
¿HMAC es lo mismo que cifrar el mensaje?#
No. HMAC solo autentica: prueba que el mensaje no se alteró y que proviene de alguien con la clave. El mensaje en sí permanece en texto plano. Si también necesitas confidencialidad, empareja HMAC con un esquema de cifrado, o usa un modo de cifrado autenticado como AES-GCM.
¿Se puede recuperar la clave secreta a partir del resumen?#
No. El resumen es una función unidireccional del mensaje y de la clave; recuperar la clave a partir de las salidas es computacionalmente inviable. Dicho esto, una clave corta o adivinable aún puede romperse por fuerza bruta probando claves candidatas sin conexión, así que usa una clave con al menos 128 bits de entropía real, no una contraseña elegida por un humano.
El receptor dice que mi firma no coincide. ¿Qué compruebo primero?#
Nueve de cada diez veces es la representación en bytes del mensaje: saltos de línea finales, codificación de URL frente al cuerpo en bruto, espacios en blanco del JSON o un orden de campos distinto. Compara los bytes exactos que firmaste contra los bytes exactos que hasheó el receptor, carácter por carácter, antes de comprobar cualquier otra cosa.