Generador de HMAC

Crea y comprueba firmas HMAC con SHA-256, SHA-384, SHA-512 o SHA-1, con la clave en texto, hexadecimal o Base64.

El formulario interactivo está listo al activar JavaScript.

Cómo utilizar

Escribe o pega el mensaje, introduce la clave secreta y elige el algoritmo; la firma aparece mientras escribes, en hexadecimal y en Base64, cada una con su botón «Copiar». Se calcula con la API Web Crypto del navegador y no se envía nada a ningún sitio.

HMAC, definido en el RFC 2104, combina una clave secreta con una función hash. Cualquiera puede calcular el SHA-256 de un mensaje, pero solo quien tiene la clave puede calcular su HMAC, así que una firma que coincide demuestra que el mensaje viene de alguien con la clave y no se modificó por el camino. La firma mide lo mismo que el hash: 32 bytes con SHA-256, 48 con SHA-384, 64 con SHA-512 y 20 con SHA-1.

La clave puede escribirse como texto, que se usa como bytes UTF-8, o darse en hexadecimal o Base64 cuando un servicio la muestra así: los mismos caracteres leídos en otro formato son otra clave. El mensaje se firma tal cual, de modo que un espacio, un salto de línea o un carácter distinto cambia toda la firma.

Para comprobar un webhook, pega el cuerpo bruto de la petición como mensaje, el secreto del endpoint como clave y la firma recibida en «Firma que comprobar». GitHub, por ejemplo, envía una cabecera X-Hub-Signature-256 con sha256= seguido del HMAC-SHA256 del cuerpo en hexadecimal; el prefijo se ignora. SHA-1 se ofrece solo para sistemas antiguos: GitHub aún envía una cabecera HMAC-SHA1, solo por compatibilidad.

Ejemplo

Comprueba el ejemplo de webhook que documenta GitHub: el secreto «It's a Secret to Everybody» y el contenido «Hello, World!» dan la firma sha256= que publica GitHub, así que coincide.

  • Jefe · what do ya want for nothing?HMAC-SHA256 5bdcc146…64ec3843: el vector de prueba del RFC 4231.
  • It's a Secret to Everybody · Hello, World!El ejemplo que documenta GitHub: sha256=757107ea…8b043e17.
  • 0b0b…0b (hex, 20 bytes) · Hi ThereHMAC-SHA256 b0344c61…2e32cff7: caso de prueba 1 del RFC 4231, con la clave en hexadecimal.
  • abcdComo texto, 4 bytes; como hexadecimal, 2 bytes (ab cd): dos claves distintas y dos firmas distintas.

Preguntas frecuentes

¿Es lo mismo HMAC que un hash?

No. Un hash como SHA-256 no necesita clave, así que cualquiera puede recalcularlo tras cambiar el mensaje. Un HMAC necesita la clave secreta, de modo que solo quien la tiene puede producir una firma válida.

¿Por qué no coincide la firma de mi webhook?

Normalmente porque el mensaje no es, byte a byte, lo que se firmó: un framework analizó y volvió a serializar el JSON, recortó espacios o cambió la codificación. Firma el cuerpo bruto tal como llegó, y comprueba que el secreto es el de ese endpoint y que el formato de la clave es el correcto.

¿Debo usar SHA-1?

Solo para hablar con un sistema que todavía lo exige. Las firmas nuevas usan SHA-256 o hashes más largos, y GitHub, por ejemplo, mantiene su cabecera de firma SHA-1 solo por compatibilidad.

¿Se envía mi clave a algún sitio?

No. La firma se calcula en tu navegador con la API Web Crypto. Aun así, evita pegar secretos reales de producción en cualquier web que no controles: un secreto de prueba basta para ver cómo funcionan las firmas.

Herramientas relacionadas