Conversor de claves JWK ⇄ PEM
Convierta claves criptográficas entre el formato JWK y PEM utilizando la API Web Crypto real, decodifique algoritmo/curva/tamaño y calcule la huella digital RFC 7638 JWK.
Resultado
Las claves web JSON (JWK) y las claves codificadas en PEM aparecen indistintamente en las bibliotecas JWT, las herramientas TLS y la configuración OAuth/OIDC, pero la conversión manual entre ambas implica decodificar estructuras DER en base64 o reformatear JSON: es fácil equivocarse sutilmente. Esta herramienta realiza la conversión con la Web Crypto API real del navegador en lugar de manipulación de texto: un bloque PEM pegado se importa con crypto.subtle.importKey('spki'|'pkcs8', ...) y se reexporta como JWK con exportKey('jwk', ...); un JWK pegado se importa con importKey('jwk', ...) y se reexporta como SPKI o PKCS8 DER, luego se incluye en el encabezado PEM correcto. Debido a que el propio navegador valida y decodifica el material clave, una clave mal formada o una selección de algoritmo no coincidente falla ruidosamente en lugar de producir basura silenciosamente.
Los algoritmos admitidos son RSA (RSASSA-PKCS1-v1_5), EC en las curvas P-256/P-384/P-521 y, cuando el navegador los implementa, Ed25519 y X25519. La compatibilidad del navegador con Ed25519/X25519 en Web Crypto sigue siendo inconsistente en todos los motores, por lo que en lugar de adivinar a partir de la cadena del agente de usuario, la herramienta ejecuta una sonda crypto.subtle.generateKey() real para la curva seleccionada y le indica claramente si no es compatible aquí, en lugar de devolver un resultado fabricado.
Cada conversión también decodifica los metadatos reales de la clave: para las claves RSA, la longitud del módulo de bits y el algoritmo hash directamente del objeto CryptoKey; para las claves EC y OKP, la curva nombrada; y para cada clave, la huella digital RFC 7638 JWK: un hash SHA-256 de los miembros requeridos del JWK serializados en estricto orden lexicográfico (e/kty/n para RSA, crv/kty/x/y para EC, crv/kty/x para OKP/Ed25519/X25519). Esta huella digital es lo que muchos sistemas usan como identificador "niño" de una clave, y equivocarse en el orden de los miembros produce un hash completamente diferente, que es exactamente el tipo de error al que es propensa una implementación manual.
Debido a que todo se ejecuta a través de crypto.subtle en la pestaña de su propio navegador, el material de la clave privada nunca sale de su dispositivo: no hay ningún servidor, ni carga ni llamada API externa involucrada en ningún momento de la conversión.