Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

438
Vistas
Cómo descifrar un JWT con clave privada RSA

Tenemos una aplicación remota que nos envía un JWT. Usaron el algoritmo "RSA-OAEP-256" y el cifrado "A256CBC-HS512" y nuestra clave pública para codificar el token, y ahora estoy tratando de descifrarlo y analizar las afirmaciones. Generé las claves con openssl rsa -in <myPrivateKey> -pubout -out <myPublicKey> , luego convertí myPrivateKey en un .der según la sugerencia de esta publicación SO . Siguiendo la guía en nimbus , se me ocurrió lo siguiente.

 @Test public void testDecryptJwtWithRsa() { String filename = <myPrivateKey.der>; String tokenString = <encryptedTokenString>; try { byte[] keyBytes = Files.readAllBytes(new File(filename).toPath()); PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory kf = KeyFactory.getInstance("RSA"); PrivateKey pk = kf.generatePrivate(spec); byte[] encodedPk = pk.getEncoded(); JWEObject jweObject = JWEObject.parse(tokenString); jweObject.decrypt(new DirectDecrypter(encodedPk)); SignedJWT signedJWT = jweObject.getPayload().toSignedJWT(); String jsonToken = jweObject.getPayload().toJSONObject().toJSONString(); System.out.println(jsonToken); } catch (Exception e) { System.out.println(e.getMessage()); Assert.fail(); } }

java.security.PrivateKey se analiza correctamente, pero recibo un error en jweObject.decrypt(new DirectDecrypter(encodedPk)); :

The Content Encryption Key length must be 128 bits (16 bytes), 192 bits (24 bytes), 256 bits (32 bytes), 384 bits (48 bytes) or 512 bites (64 bytes)

Además, en el depurador, puedo ver que jwe.payload es nulo, aunque no sé si esto debería completarse antes del descifrado.

¿Necesito generar la clave de manera diferente o hay otro paso que he omitido? ¿Necesito especificar el algoritmo en alguna parte o usar un método/clase de descifrador diferente?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Resulta que estaba usando los métodos para descifrar con claves simétricas en lugar de público/privado. Lo siguiente maneja el descifrado con éxito y me permite ver los reclamos.

 @Test public void decryptBlazemeterJwt() { try { byte[] keyBytes = Files.readAllBytes(new File(filename).toPath()); PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory kf = KeyFactory.getInstance("RSA"); PrivateKey pk = kf.generatePrivate(spec); EncryptedJWT jwt = EncryptedJWT.parse(tokenString); RSADecrypter decrypter = new RSADecrypter(pk); jwt.decrypt(decrypter); } catch (Exception e) { System.out.println(e.getMessage()); Assert.fail(); } }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda