Cómo se usa
- Escriba los datos en Mensaje. Para datos binarios, elija Hexadecimal o Base64 en Codificación del mensaje.
- Escriba el secreto en Clave y elija cómo está escrito en Codificación de la clave.
- Lea las cuatro filas de Valores HMAC. Copie el valor que necesite, o compárelo con el que da su sistema.
- Si los valores no coinciden con los de otro sistema, revise primero los bytes: un final de línea o una codificación distinta dan otro HMAC.
Qué es un HMAC
Un HMAC (RFC 2104) es un código de autenticación de mensajes: un valor corto que solo puede generar quien conoce la clave secreta. Se construye con una función hash ordinaria H, aplicada dos veces al mensaje y a la clave, así que la misma función hash sirve para las cuatro filas de la tabla. Como hace falta la clave, un HMAC que coincide demuestra que el mensaje no se cambió y que procede de quien tiene la clave.
Un HMAC no oculta el mensaje. Quien tiene el mensaje puede leerlo; el HMAC solo le permite comprobarlo.
HMAC(K, m) = H((K XOR opad) || H((K XOR ipad) || m))
ipad = el byte 0x36 repetido B veces
opad = el byte 0x5C repetido B veces
B = el tamaño de bloque de H: 64 bytes para SHA-1 y SHA-256, 128 bytes para SHA-384 y SHA-512
Qué hash y qué clave
HMAC-SHA-256 es la opción habitual, y la que usan muchos webhooks y API. HMAC-SHA-512 es la misma construcción con una salida más larga. HMAC-SHA-1 todavía aparece en sistemas antiguos, y no es una opción para diseños nuevos.
La clave debe ser aleatoria y tener al menos la longitud de la salida del hash. Una clave escrita como una palabra o una frase corta es fácil de adivinar, y una clave adivinada deja el HMAC sin valor.
Hexadecimal y Base64
Las dos formas muestran los mismos bytes. El hexadecimal escribe cada byte con dos cifras, así que SHA-256 tiene 64 cifras. Base64 escribe tres bytes como cuatro caracteres, así que SHA-256 tiene 44 caracteres, el último de ellos un = de relleno (RFC 4648).
- HMAC-SHA-1: 40 cifras hexadecimales, 28 caracteres Base64
- HMAC-SHA-256: 64 cifras hexadecimales, 44 caracteres Base64
- HMAC-SHA-384: 96 cifras hexadecimales, 64 caracteres Base64
- HMAC-SHA-512: 128 cifras hexadecimales, 88 caracteres Base64
Ejemplo resuelto: caso de prueba 2 de la RFC 4231
La clave Jefe y el mensaje what do ya want for nothing? son el segundo caso de prueba de la RFC 4231 para SHA-256, SHA-384 y SHA-512, y de la RFC 2202 para SHA-1. La tabla de abajo es lo que muestra la página para ellos, y su valor HMAC-SHA-256 es el que imprime la RFC: 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843.
| Algoritmo | Hexadecimal | Base64 |
|---|---|---|
| HMAC-SHA-1 | effcdf6ae5eb2fa2d27416d5f184df9c259a7c79 | 7/zfauXrL6LSdBbV8YTfnCWafHk= |
| HMAC-SHA-256 | 5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843 | W9zBRr9gdU5qBCQmCJV1x1oAPwidJzmDnexYuWTsOEM= |
| HMAC-SHA-384 | af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649 | r0XS43ZIQDFhf3jStYprG5x+9GT1oBtH5C7Dc2MiRF6OIkDKXmnix4syOez6shZJ |
| HMAC-SHA-512 | 164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737 | Fkt6e/z4GeLjlfvnO1bgo4e9ZCIugx/WECcM1+olBVSXWL91wFqZSm0DT2X48Ob9yuqxo01Ka0tjbgcKOLznNw== |
Preguntas frecuentes
¿Un HMAC es lo mismo que cifrar el mensaje?
No. Un HMAC no oculta el mensaje, así que cualquiera puede leerlo. Demuestra que el mensaje no se cambió y que el remitente conoce la clave. Para mantener un secreto hace falta cifrado.
¿Cuál es la diferencia entre un hash y un HMAC?
Un hash depende solo del mensaje, así que cualquiera puede calcularlo. Un HMAC necesita además la clave secreta, así que solo quien tiene la clave puede generarlo o comprobarlo. Para resúmenes simples, use el generador de hash.
¿Por qué mi HMAC es distinto del que da mi biblioteca?
La clave o los bytes del mensaje son distintos. Una clave escrita como texto son sus bytes UTF-8, y las mismas letras escritas en hexadecimal son otros bytes. Un salto de línea al final del mensaje también cambia el HMAC.
¿Qué longitud de clave debo usar?
Use una clave aleatoria de al menos la longitud de la salida del hash: 32 bytes para HMAC-SHA-256. La RFC 2104 desaconseja con firmeza una clave más corta, y una clave hecha con palabras o una frase corta es fácil de adivinar.
¿Puedo comprobar con esta página la firma de un webhook?
Sí, si usa los bytes exactos que se firmaron. Las firmas de webhooks suelen calcularse sobre el cuerpo bruto de la petición, así que pegue el cuerpo sin cambios: un cuerpo JSON reformateado da otro HMAC.
¿Se envía mi clave o mi mensaje a algún sitio?
No. El HMAC se calcula en su navegador con SubtleCrypto, la función criptográfica propia del navegador. La clave y el mensaje no se suben ni se guardan.
Fuentes
- RFC 2104 (en inglés): HMAC: Keyed-Hashing for Message Authentication
- RFC 4231 (en inglés): Identifiers and Test Vectors for HMAC-SHA-224, HMAC-SHA-256, HMAC-SHA-384 and HMAC-SHA-512
- RFC 2202 (en inglés): Test Cases for HMAC-MD5 and HMAC-SHA-1
- RFC 4648 (en inglés): The Base16, Base32, and Base64 Data Encodings
- NIST FIPS 180-4 (en inglés): Secure Hash Standard (SHA-1 y la familia SHA-2)
Cifras y texto revisados por última vez el martes, 10 de noviembre de 2026.