当前位置: 首页 > 知识库问答 >
问题:

解密JWE时出错

郑宏朗
2023-03-14

对于JWE解密这件事来说有点陌生。我有一个服务器,它执行JWE并根据服务器和客户端之间共享的密钥将其发送给客户端。

我正在使用Jose4j进行解密,并得到了这个错误

Java语言lang.NullPointerException:JWE的明文负载尚未设置。

我正在使用此链接中显示的示例代码,接收器部分

https://bitbucket.org/b_c/jose4j/wiki/JWE示例

我对服务器没有任何洞察力,只是编写客户端。我很困惑,如果paylaod本身没有来,或者那个框架正在试图解密。

感谢任何调试问题的指针

问候,阿拉文

共有2个答案

沙小白
2023-03-14

JWE在获得纯文本负载之前需要2个级别的解密。

所以首先是JWE到JWS。然后在验证签名后从JWS到JWT。下面的代码将实现这一点。

  // That other party, the receiver, can then use JsonWebEncryption to decrypt the message.
        JsonWebEncryption receiverJwe = new JsonWebEncryption();

        // Set the compact serialization on new Json Web Encryption object
        //This is the received payload JWE payload 
        receiverJwe.setCompactSerialization(result.toString());


        // Symmetric encryption, like we are doing here, requires that both parties have the same key.
        // The key will have had to have been securely exchanged out-of-band somehow.
        receiverJwe.setKey(secretKeySpec);

        // Set the "alg" header, which indicates the key management mode for this JWE.
        // In this example we are using the direct key management mode, which means
        // the given key will be used directly as the content encryption key.
        //receiverJwe.setAlgorithmHeaderValue(KeyManagementAlgorithmIdentifiers.DIRECT);

        //receiverJwe.setEncryptionMethodHeaderParameter(ContentEncryptionAlgorithmIdentifiers.AES_128_CBC_HMAC_SHA_256);

        // Get the message that was encrypted in the JWE. This step performs the actual decryption steps.
        String jwsPayload = receiverJwe.getPlaintextString();

        // And do whatever you need to do with the clear text message.
        System.out.println("plaintext: " + jwsPayload);

        // Create a new JsonWebSignature object
        JsonWebSignature jws = new JsonWebSignature();

        jws.setCompactSerialization(jwsPayload);

        jws.setKey(secretKeySpec);

        boolean signatureVerified = jws.verifySignature();

        // Do something useful with the result of signature verification
        System.out.println("JWS Signature is valid: " + signatureVerified);

        // Get the payload, or signed content, from the JWS
        String payload = jws.getPayload();

        // Do something useful with the content
        System.out.println("JWS payload: " + payload);
施锋
2023-03-14

只有在没有有效负载集的情况下,才会从getCompactSerialization()方法引发该特定异常-getCompactSerialization()是发送/加密端创建JWE的最后一步。如果你正在解密,你不应该这么叫。也许你在什么地方接到了一个意外的电话?否则,您使用的代码以及示例原始JWE值可能有助于解决问题(和键,如果这只是一个测试,您可以共享它们)。

 类似资料:
  • 我试图在Android(Java)中实现ECDH加密/解密和JWE。 我找到了jose4j和Nimbus JOSE库,它们旨在做我需要的一切,但似乎比我想象的更具挑战性。 如果有人熟悉的话,那就是3D安全2.0。。。 在以下规范中: SDK=本地端 DS=目录服务器(另一边) 接下来是规范: 给定:P(DS)-EC公钥(以PEM格式提供,可以转换为PublicKey或JWK) 生成新的短暂密钥对(

  • 我正在尝试解密存储在SecureStorage文件中的数据库密码。我正在使用nCipherKM HSM安全提供程序,用于解密的密钥加密密钥存储在密钥存储库(文件夹)中。当我尝试通过传递密钥存储库密码来加载HSM密钥存储库时,它无法使用以下异常加载密钥存储库。不确定此错误的根本原因是什么。 代码片段: 例外: Java语言io。IOException:提供了密码,但所有密钥都受模块保护。在com。n

  • 我有一个类似于下面的私钥 例如。 我有下面的JWE数据,它是使用上面的私钥/证书生成的公钥加密的 有人能给我java代码,我可以用我的私钥解密这个JWE吗?我在网上找不到明确的答案。我对JWE这个概念很陌生

  • 我试图实现我的RestAPI的JWE。我遇到了以下实现JWE的节点库。然而,库缺乏关于如何使用JSON Web密钥(JWK)(JSON对象)的留档,这有助于密钥管理模式。JWE留档内容如下: 确定要使用的内容加密密钥值的方法。用于确定CEK值的每个算法使用特定的密钥管理模式。本规范采用的密钥管理模式包括密钥加密、密钥包装、直接密钥协议、密钥协议与密钥包装以及直接加密。 所以我想知道我应该如何将JW

  • 我试图学习并在java中实现JWE来解决问题。我试图理解内容加密密钥是如何使用特定算法生成的(比如RSA-PKCS1\u 1.5)。 我知道如何使用密钥生成器生成一对密钥,然后使用公钥进行加密,使用私钥进行解密。此外,我知道如何通过给出声明来创建简单的JWT令牌,以及如何对其进行签名。我试着遵循以下步骤: 消息加密过程如下: 生成随机内容加密密钥(CEK)。CEK的长度必须至少等于所需加密密钥的长

  • 问题内容: 根据RFC 7516,应该可以加密称为JWE的有效负载/声明。 是否有任何支持该功能的python库? 我已经检查了PyJWT,python-jose和jwcrypto,但它们都只提供了(JWS)签名的示例。 抱歉,如果这是完全显而易见的,但是在涉及加密的事情上,我要格外谨慎。 问题答案: Jose和jwcrypto库都可以执行JWE。 对于jose: 对于jwcrypto: