Generador HMAC
Introduce un mensaje y una clave secreta para crear una firma HMAC con SHA-256, SHA-512, SHA-384, SHA-1 o MD5. Cambia a Verificar para comprobar una firma que hayas recibido, por ejemplo de un webhook. Todo se ejecuta localmente en tu navegador.
Última actualización:
–
Todos los algoritmos
Hex, Base64 y Base64URL se detectan automáticamente. Los prefijos como sha256= (webhooks de GitHub) se ignoran.
Cómo usar Generador HMAC
- Escribe o pega el mensaje que quieres firmar. Elige Hex o Base64 si tu contenido es binario.
- Introduce la clave secreta y elige su codificación: texto simple, hex o Base64 (muchas API dan los secretos en Base64).
- Elige el algoritmo y el formato de salida, por ejemplo HMAC-SHA256 en hex para la mayoría de los webhooks, o Base64URL para firmas JWT.
- Pulsa Generar HMAC (también se actualiza mientras escribes) y copia el resultado. La tabla muestra todos los algoritmos a la vez.
- Para comprobar una firma, abre Verificar firma, pega el valor que recibiste y pulsa Verificar firma.
Vector de prueba HMAC que puedes comprobar
El ejemplo clásico usa la clave key y el mensaje The quick brown fox jumps over the lazy dog (ambos como texto UTF-8). Introdúcelos arriba y deberías obtener exactamente estos valores:
| Algoritmo | HMAC (hex) |
|---|---|
| HMAC-MD5 | 80070713463e7749b90c2dc24911e275 |
| HMAC-SHA1 | de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9 |
| HMAC-SHA256 | f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8 |
Algoritmos, tamaños de bloque y longitudes de salida
| Algoritmo | Tamaño de bloque | Salida | Longitud en hex | Longitud en Base64 | Uso típico |
|---|---|---|---|---|---|
| HMAC-MD5 | 64 bytes | 128 bits | 32 | 24 | API antiguas, RADIUS |
| HMAC-SHA1 | 64 bytes | 160 bits | 40 | 28 | OAuth 1.0, códigos TOTP/HOTP, webhooks antiguos |
| HMAC-SHA256 | 64 bytes | 256 bits | 64 | 44 | Webhooks (GitHub, Stripe, Shopify), AWS SigV4, JWT HS256 |
| HMAC-SHA384 | 128 bytes | 384 bits | 96 | 64 | JWT HS384, TLS |
| HMAC-SHA512 | 128 bytes | 512 bits | 128 | 88 | JWT HS512, firmas de alta seguridad |
Calcular HMAC-SHA256 en código
Una vez que hayas comprobado un valor aquí, puedes producir la misma firma en tu aplicación:
| Lenguaje | Código |
|---|---|
| Python | hmac.new(key.encode(), msg.encode(), hashlib.sha256).hexdigest() |
| Node.js | crypto.createHmac('sha256', key).update(msg).digest('hex') |
| PHP | hash_hmac('sha256', $msg, $key) |
| Línea de comandos | printf '%s' "$msg" | openssl dgst -sha256 -hmac "$key" |
Al verificar en código, compara las firmas con una función de tiempo constante como hmac.compare_digest en Python o crypto.timingSafeEqual en Node.js para evitar ataques de temporización.
Preguntas frecuentes
¿Qué es un HMAC?
HMAC (código de autenticación de mensajes basado en hash) combina una clave secreta con una función hash como SHA-256 para producir una firma de un mensaje. Cualquiera que tenga la misma clave puede volver a calcularla para confirmar que el mensaje no se modificó y que procede de alguien que conoce la clave.
¿Cómo se calcula el HMAC?
HMAC(K, m) = H((K′ ⊕ opad) ‖ H((K′ ⊕ ipad) ‖ m)), donde K′ es la clave rellenada hasta el tamaño de bloque del hash (64 bytes para MD5, SHA-1 y SHA-256, 128 bytes para SHA-384 y SHA-512), ipad es el byte 0x36 repetido y opad es 0x5c repetido. Las claves más largas que el tamaño de bloque se pasan antes por el hash.
¿Cómo verifico la firma de un webhook?
Usa como mensaje el cuerpo sin procesar de la solicitud exactamente como lo recibiste, tu secreto del webhook como clave y el algoritmo que documenta el proveedor (normalmente HMAC-SHA256). Compara el resultado con la cabecera de la firma. En la pestaña Verificar puedes pegar directamente el valor de la cabecera, incluidos prefijos como sha256=.
¿Por qué no coincide mi HMAC?
Las causas más comunes son una codificación de clave distinta (un secreto en Base64 escrito como texto), espacios en blanco de más o un final de línea distinto en el mensaje, un cuerpo JSON que se reformateó antes de firmarlo, o el algoritmo equivocado. Revisa cada una de ellas y compara el número de bytes.
¿Siguen siendo seguros HMAC-MD5 y HMAC-SHA1?
HMAC es mucho más robusto que el hash simple, y hoy no existen ataques prácticos de falsificación contra HMAC-SHA1 y HMAC-MD5. Aun así, usa HMAC-SHA256 o algo más fuerte para cualquier cosa nueva; MD5 y SHA-1 se ofrecen por compatibilidad con sistemas antiguos.
¿Cuál es la diferencia entre la salida Base64 y Base64URL?
Base64URL sustituye + por - y / por _ y elimina el relleno =, de modo que el valor se puede usar con seguridad en URL y cabeceras HTTP. Los JSON Web Tokens (JWT) usan Base64URL para sus firmas HS256.
¿Se envía mi clave secreta a algún sitio?
No. El HMAC se calcula en tu navegador con la Web Crypto API y una rutina MD5 local. No se sube ni se guarda nada.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.