Toolonit
  1. Inicio
  2. Cifrado
  3. HMAC

Generador y verificador HMAC

Genera y verifica firmas HMAC-SHA256 y otras variantes de HMAC con una clave secreta.

0 bytes
La clave es
Algoritmo
Salida
HMAC-SHA-256Escribe la clave secreta para ver el HMAC.

Opcional. El valor de una cabecera X-Hub-Signature-256 de GitHub (sha256=…) se puede pegar tal cual.

Un HMAC es una firma calculada a partir de un mensaje y una clave secreta compartida: cualquiera que tenga la clave puede volver a calcularla, y cualquier cambio en el mensaje o en la clave da un valor distinto. Lo usan los webhooks (GitHub, Stripe, Slack), las peticiones firmadas a API y los tokens JWT HS256. El HMAC se actualiza mientras escribes, y puedes pegar una firma para comprobarla. Lo calcula Web Crypto, integrado en tu navegador, así que el mensaje y la clave nunca salen de tu dispositivo; es gratis y no requiere registro.

Cómo generar y verificar un HMAC

  1. Pega el mensaje exactamente como se firmó; en un webhook, el cuerpo de la petición sin modificar.
  2. Escribe la clave secreta o haz clic en Generar para obtener una aleatoria; elige Hex si te dieron la clave como bytes en hexadecimal.
  3. Elige el algoritmo (SHA-256, salvo que te indiquen otro) y copia el resultado en hexadecimal o Base64.
  4. Para comprobar una firma, pégala en Comprobar una firma; el valor de una cabecera sha256=… de GitHub funciona tal cual.

Funciones

  • HMAC-SHA1, HMAC-SHA256, HMAC-SHA384 y HMAC-SHA512
  • Clave secreta como texto (UTF-8) o en hexadecimal, o una clave aleatoria de 32 bytes con Generar
  • Resultado en hexadecimal o Base64, actualizado mientras escribes
  • Comprueba una firma recibida en hexadecimal o Base64 (también la variante para URL), con o sin el prefijo sha256= de GitHub o v0= de Slack
  • Te avisa cuando una firma tiene la longitud de otro algoritmo, con un botón para cambiar
  • Cálculo con Web Crypto, integrado en tu navegador

¿Es privado?

Sí. El HMAC lo calcula Web Crypto, integrado en tu navegador; el mensaje y la clave secreta se quedan en esta página y nunca se suben ni se guardan.

Preguntas frecuentes

¿Cómo verifico la firma de un webhook de GitHub?

Pega el cuerpo sin modificar de la petición como mensaje, el secreto del webhook como clave de texto y el valor de la cabecera X-Hub-Signature-256 en Comprobar una firma. GitHub envía sha256= seguido del HMAC-SHA256 del cuerpo en hexadecimal, y el prefijo se lee tal cual.

¿Cómo compruebo la firma de un JWT HS256?

Pega la cabecera y la carga útil del token (todo lo que hay antes del segundo punto) como mensaje y el secreto como clave, elige SHA-256 y pega la tercera parte del token en Comprobar una firma. Su Base64 para URL se lee tal cual.

¿Por qué no coincide mi firma?

El mensaje debe ser, byte a byte, lo que se firmó: un JSON reformateado, un salto de línea de más o de menos al final o los finales de línea de Windows (CRLF) cambian el HMAC. El texto escrito aquí usa saltos de línea LF. Comprueba también el algoritmo y si la clave es texto o hexadecimal.

¿Da el mismo resultado que OpenSSL?

Sí. printf '%s' 'mensaje' | openssl dgst -sha256 -hmac 'clave' muestra el mismo valor hexadecimal, y una clave hexadecimal coincide con -mac HMAC -macopt hexkey:…. Usa printf o echo -n: echo a secas añade un salto de línea que también se firma.

¿Sigue siendo seguro usar HMAC-SHA1?

Para HMAC, en la práctica sí: las colisiones conocidas de SHA-1 no rompen HMAC-SHA1, y por eso los webhooks más antiguos todavía lo usan. Para cualquier cosa nueva, elige HMAC-SHA256.

Herramientas relacionadas