gpt4 book ai didi

java - 如何使用 RSA 私钥解密 JWT

转载 作者:行者123 更新时间:2023-12-02 13:29:48 28 4
gpt4 key购买 nike

我们有一个远程应用程序向我们发送 JWT。他们使用“RSA-OAEP-256”算法和“A256CBC-HS512”加密以及我们的公钥来对 token 进行编码,现在我正在尝试解密它并解析声明。我用 openssl rsa -in <myPrivateKey> -pubout -out <myPublicKey> 生成了 key ,然后我转换了 myPrivateKey根据此 SO post 的建议到 .der 。按照 nimbus 上的指南进行操作,我想出了以下内容。

    @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 解析正确,但我在 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)

此外,在调试器中,我可以看到 jwe.payload为空,但我不知道是否应该在解密之前填充它。

我是否需要以不同的方式生成 key ,或者我是否省略了另一个步骤?我是否需要在某处指定算法,或者使用不同的解密器方法/类?

最佳答案

事实证明,我使用的是对称 key 而不是公共(public)/私有(private) key 进行解密的方法。以下内容成功处理解密并允许我查看声明。

    @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();
}
}

关于java - 如何使用 RSA 私钥解密 JWT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43238734/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com