【问题标题】:How to decrypt JWE(Json Web Encryption) data using private key in java如何在java中使用私钥解密JWE(Json Web Encryption)数据
【发布时间】:2019-02-19 20:52:52
【问题描述】:

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

例如

-----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 概念不熟悉,我很友善

【问题讨论】:

  • 这取决于使用的加密算法。它出现在 jwe 的第一部分(在您的示例中为 aaaaa)。无论如何,我建议你看看:bitbucket.org/b_c/jose4j/wiki/Home。在那里你可以在源代码旁边找到解释
  • 它是 SHA256withRSA 和 X509 证书 2048 密钥
  • 你可以看看RFC
  • 何塞代表什么
  • @Roshanck 嗨,我也在寻找答案。你想清楚了吗?

标签: java encryption nimbus jose4j jwe


【解决方案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);
}

【讨论】:

    【解决方案2】:

    由于您的其他问题和该问题的标签,我假设您选择了 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();
    

    【讨论】:

    • 你能用你的第一行RSAPrivateKey privateKey; //initialize with your key解释更多吗?
    猜你喜欢
    • 1970-01-01
    • 2021-08-27
    • 2022-07-22
    • 2016-12-31
    • 2017-04-19
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2014-10-03
    相关资源
    最近更新 更多