如何使用java中的私钥解密JWE(Json Web Encryption)数据

问题描述 投票:0回答:3

我有一个类似于下面的私钥

EG

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDGBRdsiDqKPGyH
gOpzxmSU2EQkm+zYZLvlPlwkwyfFWLndFLZ3saxJS+LIixsFhunrrUT9ZZ0x+bB6
MV55o70z4ABOJRFNWx1wbMGqdiC0Fyfpwad3iYpRVjZO+5etHA9JEoaTPoFxv+kt
QwBjBRAJ3Y5jtrESprGdUFRb0oavDHuBtWUt2XmXspWgtRn1xC8sXZExDdxmJRPA
ADTO3rrGo9hicG/WKGzSHD5l1f+IO1SfmUN/6i2JjcnE07eYArNrCfbMgkFavj50
2ne2fSaYM4p0o147O9Ty8jCyY9vuh/ZGid6qUe3TBI6/okWfmYw6FVbRpNfVEeG7
kPfkDW/JdH7qkWTFbh3eH1k=
-----END PRIVATE KEY-----

我有一个如下的JWE数据,它是使用从上面的私钥/证书生成的公钥加密的

aaaaa.bbbbb.ccccc.ddddd.eeeee

有人可以给我java代码我可以用我的私钥来解密这个JWE吗?我无法从互联网上找到明确的答案。如果对这个JWE概念不熟悉,我很友好

java encryption nimbus jose4j jwe
3个回答
1
投票

让你开始的东西:

public static void main(String[] args) throws Exception
{
    Key privateKey = KeyFactory
            .getInstance("RSA")
            .generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode("your base64 private key")));

    Cipher decrypt = Cipher.getInstance("RSA/ECB/PKCS1Padding");

    decrypt.init(Cipher.DECRYPT_MODE, privateKey, new IvParameterSpec(Base64.getDecoder().decode("ccccc")));

    String decryptedMessage = new String(decrypt.doFinal(Base64.getDecoder().decode("ddddd")), StandardCharsets.UTF_8);
}

1
投票

由于您对此问题的其他问题和标签,我假设您选择了库Nimbus JOSE + JWT。无论您的JWT框架如何,我建议您使用提供的方式加密/解密您的令牌,因为它们验证令牌的结构。

RSAPrivateKey privateKey; //initialize with your key
String jwtTokenAsString = "aaaaa.bbbbb.ccccc.ddddd.eeeee"; //your token
EncryptedJWT encryptedJWT = EncryptedJWT.parse(jwtTokenAsString);
RSADecrypter decrypter = new RSADecrypter(privateKey);
encryptedJWT.decrypt(decrypter);

//Access content with diffrent methods
JWTClaimsSet claims = encryptedJWT.getJWTClaimsSet();
Payload payload = encryptedJWT.getPayload();

0
投票

看看https://jwt.io。该站点可帮助您调试问题,并为您提供解决问题的多个库的链接。

© www.soinside.com 2019 - 2024. All rights reserved.