Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

443
Views
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?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

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(); } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!