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:

HMAC-SHA256 –

Todos los algoritmos

Publicidad

Cómo usar Generador HMAC

  1. Escribe o pega el mensaje que quieres firmar. Elige Hex o Base64 si tu contenido es binario.
  2. Introduce la clave secreta y elige su codificación: texto simple, hex o Base64 (muchas API dan los secretos en Base64).
  3. 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.
  4. Pulsa Generar HMAC (también se actualiza mientras escribes) y copia el resultado. La tabla muestra todos los algoritmos a la vez.
  5. 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:

AlgoritmoHMAC (hex)
HMAC-MD580070713463e7749b90c2dc24911e275
HMAC-SHA1de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9
HMAC-SHA256f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8

Algoritmos, tamaños de bloque y longitudes de salida

AlgoritmoTamaño de bloqueSalidaLongitud en hexLongitud en Base64Uso típico
HMAC-MD564 bytes128 bits3224API antiguas, RADIUS
HMAC-SHA164 bytes160 bits4028OAuth 1.0, códigos TOTP/HOTP, webhooks antiguos
HMAC-SHA25664 bytes256 bits6444Webhooks (GitHub, Stripe, Shopify), AWS SigV4, JWT HS256
HMAC-SHA384128 bytes384 bits9664JWT HS384, TLS
HMAC-SHA512128 bytes512 bits12888JWT 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:

LenguajeCódigo
Pythonhmac.new(key.encode(), msg.encode(), hashlib.sha256).hexdigest()
Node.jscrypto.createHmac('sha256', key).update(msg).digest('hex')
PHPhash_hmac('sha256', $msg, $key)
Línea de comandosprintf '%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.

Herramientas relacionadas

Ver todas las de Codificadores, hashes y criptografía →