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.