Cómo generar un HMAC
Introduce el secreto compartido y el mensaje exactamente como define el protocolo, selecciona SHA-2 y la codificación y genera. Una diferencia de espacio, salto o codificación cambia el código.
- Pega la clave literal solo si el protocolo indica texto UTF-8; una clave Hex o Base64 suele representar bytes y debe decodificarse.
- Pega los datos exactos, incluidos saltos, separadores, marca temporal y representación canónica.
- Elige SHA-256, SHA-384 o SHA-512 y Hex o Base64 según el protocolo.
- Genera, compara el código completo y limpia clave y portapapeles al terminar.
Ejemplos y comportamiento esperado
| Entrada | Salida | Notas |
|---|---|---|
Clave Jefe
Datos what do ya want for nothing?
HMAC-SHA-256 |
5bdcc146bf60754e6a042426089575c75… |
Vector RFC 4231, caso 2. |
Clave secret
Datos message |
HMAC determinista |
Mismos bytes, algoritmo y codificación producen el mismo valor. |
Clave secret
Datos Message |
HMAC diferente |
Cambiar mayúsculas cambia los bytes. |
Clave secreto
Datos Hola 👋 |
HMAC UTF-8 |
Caracteres internacionales se codifican en UTF-8. |
Salida Hex |
Dos caracteres por byte |
HMAC-SHA-256 tiene 64 caracteres Hex. |
Salida Base64 |
Base64 de los mismos bytes |
La codificación no cambia el resultado criptográfico. |
Qué proporciona HMAC
HMAC combina una clave secreta con una función hash. Quien tiene la misma clave puede recomputar el código y detectar cambios; un tercero sin la clave no debería poder autenticar un mensaje modificado.
Aporta integridad y autenticidad compartida, no cifrado. El mensaje sigue legible y no garantiza el no repudio porque todos los poseedores de la clave pueden generar códigos. Para verificación pública usa firmas digitales.
- HMAC-SHA-256 usa SHA-256 dentro de la construcción.
- La longitud coincide con el hash subyacente.
- La confidencialidad requiere cifrado separado.
Representación y gestión de claves
El campo se interpreta como texto UTF-8. Una cadena Hex o Base64 suele ser una codificación de bytes de clave; usar sus caracteres literalmente produce otro HMAC. Decodifica según el protocolo o usa una herramienta con opción de codificación de clave.
La seguridad depende de entropía, almacenamiento y rotación. Usa claves aleatorias, gestor de secretos, acceso mínimo, identificadores de clave y revocación. Nunca incluyas claves en el control de versiones, repositorios ni tickets.
- Distingue bytes crudos de texto codificado.
- Evita contraseñas humanas como claves directas.
- Planifica rotación de webhooks.
Bytes canónicos y UTF-8
HMAC autentica bytes. Saltos de línea, espacios, normalización Unicode, orden JSON, URL encoding o formato temporal cambian el resultado. Reformatear JSON antes de verificar suele romper la firma.
Usa el cuerpo bruto o la cadena exacta definida, con separadores y ceros iniciales. No conviertas segundos a milisegundos por tu cuenta. La mayoría de fallos de integración son de canonicalización.
- CRLF y LF son distintos.
- Un salto final cambia el código.
- Unicode visualmente igual puede tener otra normalización.
Algoritmo y codificación
Se admiten HMAC-SHA-256, 384 y 512. Usa el algoritmo requerido. SHA-256 es común, pero un diseño nuevo debe seguir un estándar revisado.
Hex y Base64 representan los mismos bytes. Base64 estándar no es Base64url. Sigue exactamente el alfabeto, el relleno y las mayúsculas o minúsculas que espera el verificador.
- HMAC-SHA-256 produce 32 bytes.
- El uso de mayúsculas o minúsculas en hexadecimal depende del protocolo.
- Base64 estándar usa +, / y relleno.
Verificación de webhooks y APIs
Un verificador robusto lee el cuerpo bruto, extrae tiempo y key ID, reconstruye el mensaje, calcula HMAC y compara en tiempo constante. También valida frescura y replay.
Esta página sirve para vectores y depuración, no como endpoint. No expongas secretos de producción en una sesión compartida; verifica en el servidor antes de ejecutar acciones.
- Verifica bytes brutos cuando el protocolo lo exige.
- Rechaza tiempos antiguos.
- Compara en tiempo constante.
- Selecciona la clave por ID durante rotación.
Errores, límites y manejo seguro
Se rechaza una clave vacía y se requiere Web Crypto. Clave y mensaje permanecen en estado de la página, sin persistencia intencionada. Limpiar no borra gestores del portapapeles ni grabaciones.
Solo se admite texto, no claves binarias o archivos. No deriva claves, no trunca tags, no compara ni gestiona replay. Para secretos de alta sensibilidad usa un entorno local auditado.
- No pegues secretos reales en equipos compartidos.
- Limpia el portapapeles.
- No trunques HMAC salvo que el protocolo lo defina.
Diferencias con hash y cifrado
Un hash plano no tiene clave. HMAC es una construcción estándar y no debe reemplazarse por hash(clave || mensaje), que puede tener debilidades estructurales.
El cifrado oculta contenido; HMAC autentica pero no oculta. Usa cifrado autenticado revisado si necesitas ambas propiedades y no inventes un protocolo propio.