Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

444
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda