🧰 UtlKit

Cómo Usar el Generador HMAC: Firmas SHA-256, SHA-384 y SHA-512 desde Claves de Texto o Hexadecimales, en el Navegador

Un mensaje y un secreto, leídos como texto UTF-8 o hexadecimal plano, firmados con SHA-256, SHA-384 o SHA-512 a un resumen en hexadecimal o Base64, todo calculado en el navegador con WebCrypto.

El Generador HMAC firma un mensaje con una clave secreta e imprime el resumen con clave. Todo el cálculo es una llamada WebCrypto en el navegador: el mensaje y la clave se quedan en la página, nada se envía a ningún servidor, y el resultado es una cadena determinista que puedes pegar en un encabezado de petición, un parámetro de consulta o un vector de prueba. Empieza en el Generador HMAC, teclea The quick brown fox jumps over the lazy dog como mensaje, teclea key como secreto, deja SHA-256 y Hex seleccionados y pulsa Generar: el resumen imprime f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8.

Los cuatro controles

Cuatro entradas dirigen el resumen: la caja de mensaje, la caja de clave secreta con su conmutador Text/Hex, la selección de algoritmo y la selección de formato de salida. El mensaje es un área de texto de varias líneas: los saltos de línea son parte del mensaje y se firman, así que las mismas palabras en dos líneas firman distinto que las mismas palabras unidas por un espacio, y los bytes UTF-8 de 你好 firman como 309b75c0cbbfb27bb35b8d7b8f4adb4b9399cd54339ab5faeb8798e1b9f7f00c bajo la clave key. La clave secreta es una caja de una línea, y su conmutador decide cómo se lee la cadena. La selección de algoritmo ofrece SHA-256, SHA-384 y SHA-512, y la de formato ofrece Hex y Base64. Generar es un botón explícito: nada se calcula hasta que se pulsa, y el resumen aparece en una caja de solo lectura con un botón de copiar al lado.

Claves de texto y claves hexadecimales

En modo Text la clave se lee como los bytes UTF-8 tal como se teclean: cada carácter es parte de la clave, incluido un espacio final, así que la clave key firma abc como 9c196e32dc0175f86f4b1cb89289d6619de6bee699e4c378e68309ed97a1a6ab, mientras que key con un espacio final firma el mismo abc como 0324ef70f9e605e123731b458dcdce99cf5f8d23572f604fbdabf371aedb0f68. En modo Hex la cadena se despoja primero de todo espacio en blanco y luego se lee como pares de bytes planos, así que 616263 son los tres bytes 0x61, 0x62 y 0x63, no los seis caracteres del texto 616263: bajo el mensaje msg la clave hex 616263 firma como eb14f17c9f056479f147adcf8020d27914f1e5971f049e75bf21a669cbd747e2, mientras que la clave de texto 616263 firma como 49962d2f0cde29c6a4848f8ea64575424ad42d3d108452127c0512cb88444a41. La cadena hex debe tener al menos dos caracteres, longitud par, y todos los caracteres dígitos hexadecimales; 6162635 cae en la comprobación antes de que corra ninguna criptografía, al igual que las longitudes impares y las letras fuera de a a f.

Los tres algoritmos

La longitud del resumen la fija el algoritmo: SHA-256 imprime 32 bytes, que son 64 caracteres hex o 44 caracteres Base64 con un = de relleno; SHA-384 imprime 48 bytes, 96 caracteres hex o 64 caracteres Base64 sin relleno; SHA-512 imprime 64 bytes, 128 caracteres hex o 88 caracteres Base64 con relleno doble. Los tres son la misma construcción con clave sobre tres funciones hash, así que conmutar la selección cambia la longitud y el valor, no la forma de la entrada. La herramienta reproduce los vectores de prueba de la RFC 4231: con la clave hex 0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b y el mensaje Hi There, SHA-256 imprime b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7 y SHA-512 imprime 87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854, y con la clave de texto Jefe y el mensaje what do ya want for breakfast?, SHA-256 imprime 47f69d8f80f0a6326746beec23a9040fd533642b5ba38a99287670639d8b862a.

Hex y Base64

Hex imprime el resumen byte a byte en minúsculas, dos caracteres por byte, y Base64 imprime los mismos bytes con relleno estándar. Las dos notaciones cargan los mismos 32 bytes: el mensaje fox bajo la clave key es f7bc83f430538424b13298e6aa6fb143ef4d59a14946175997479dbc2d1a3cd8 en Hex y 97yD9DBThCSxMpjmqm+xQ+9NWaFJRhdZl0edvC0aPNg= en Base64, siendo el = final relleno y no un carácter firmado. El mensaje Jefe imprime R/adj4DwpjJnRr7sI6kED9UzZCtbo4qZKHZwY52Lhio= bajo SHA-256, MxTAcsyrQOuSUFsKlh1Gv2UuDowpCJfZzsFDvCo65FGJ15G5QCeCSey3RFF3dIlG bajo SHA-384, donde los 48 bytes llenan los grupos Base64 exactamente y no aparece relleno, y af7nmi5sP0zyOeCqttVBl2h4BIXw5B/8dZckor99FGR+CncEsWts5Zi2pWU1HIhhnQ3+0nKMj8+Ja0GvkB1UCA== bajo SHA-512, donde los 64 bytes dejan un byte en el último grupo y el doble = lo rellena. El botón de copiar pone la cadena impresa en el portapapeles y lee Copiado durante dos segundos.

Determinismo y las comprobaciones de entrada

El mismo mensaje, clave y algoritmo imprimen siempre el mismo resumen: no hay sal, ni marca de tiempo ni azar, y esa es la propiedad que hace al HMAC usable como vector de prueba y como comprobación compartida entre dos sistemas. Dos entradas se rechazan antes de que corra ninguna criptografía: un mensaje vacío o solo de espacios en blanco levanta el error de mensaje, y una clave vacía o solo de espacios en blanco levanta el error de clave; una clave hex que cae en la comprobación hex levanta el error de hex no válido, y en los tres casos las cajas guardan su contenido para corregir. La longitud de la clave no tiene otra restricción: una clave de un solo byte firma abc como df55998f9fc33d78ac99d1d8ebc2b6e16aa076c4189946942a82b55d5dee8dc7, y una clave de 100 bytes firma el mismo abc como 30f0f7f4a3d31b9750666b038c048550020795dd2743759bf83bcf5e0f125b36, porque la construcción HMAC primero hashea una clave demasiado larga hasta el tamaño del hash. Queda una esquina de plataforma: la API subtle de WebCrypto solo existe en contextos seguros, así que en una página servida por http plano, el botón levanta el error de fallo en lugar de calcular.

Lo que no es

El Generador HMAC no es una herramienta de hash plano: para un resumen del mensaje solo, sin ninguna clave, el Generador de hash corre MD5, SHA-1 y la familia SHA-2 sobre el texto. Tampoco es una herramienta JWT: para leer, dividir y decodificar en Base64 un token en lugar de firmarlo, el Decodificador JWT hace eso. Y no cifra: el resumen es una firma, no un contenedor de secretos, y la guía AES cubre la dirección de cifrado. Y no guarda estado más allá de las cuatro entradas: no hay historial, ni clave guardada ni memoria de un resumen anterior, y cerrar la página descarta el mensaje y el secreto.

Herramientas Relacionadas

Preguntas Frecuentes

¿El Generador HMAC envía el mensaje o la clave a un servidor?

No. El resumen lo calcula en la página la API WebCrypto del navegador a partir de las dos cajas y las dos selecciones. Los bytes del mensaje, los bytes de la clave y el resultado se quedan todos en la página; pulsar Generar no hace ninguna petición de red, y la única cosa que sale de la página es una copia que tú haces del resumen impreso.

¿Por qué las mismas palabras dan resúmenes distintos?

Porque el modo de clave lee la cadena de manera distinta. La clave de texto 616263 son seis caracteres UTF-8 y firma el mensaje msg como 49962d2f0cde29c6a4848f8ea64575424ad42d3d108452127c0512cb88444a41, mientras que la clave hex 616263 son tres bytes planos y firma el mismo mensaje como eb14f17c9f056479f147adcf8020d27914f1e5971f049e75bf21a669cbd747e2. Los espacios pesan igual en modo texto: una clave con un espacio final firma abc como 0324ef70f9e605e123731b458dcdce99cf5f8d23572f604fbdabf371aedb0f68, distinta de la misma clave sin el espacio.

¿Por qué la clave hex 6162635 se rechaza?

La comprobación hex corre antes de ninguna criptografía: la cadena, sin espacios en blanco, debe tener al menos dos caracteres, longitud par, y cada carácter un dígito hexadecimales. 6162635 tiene siete caracteres, longitud impar, así que levanta el error de hex no válido; una cadena con una letra fuera de a a f, o un solo carácter, cae en la misma comprobación. El error no limpia la caja.

¿Pulsar Generar dos veces imprime dos resúmenes distintos?

No. El HMAC es determinista: el mismo mensaje, clave, algoritmo y formato imprimen siempre la misma cadena, porque la construcción no tiene sal, ni marca de tiempo ni azar. Esa es la propiedad que deja a dos sistemas con un secreto compartido verificarse mutuamente, y la razón por la que el valor impreso puede pegarse como vector de prueba.

¿Cuál de SHA-256, SHA-384 y SHA-512 debería elegir?

El algoritmo es un contrato con el verificador: elige el que la contraparte o la especificación espera, porque una firma verificada contra el hash equivocado no coincidirá. Los tres difieren en longitud de salida, 32, 48 y 64 bytes, y en la función hash dentro de la construcción con clave. Al elegir libremente, SHA-256 es el defecto más común, y SHA-512 da el resumen más largo.

Artículos Relacionados