首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jose4j,用对称密钥解密JWE

jose4j,用对称密钥解密JWE
EN

Stack Overflow用户
提问于 2021-06-10 16:04:37
回答 1查看 428关注 0票数 0

我试图以jwt.io为例,复制JWE的解码,并使用库jose4j将其转换为代码

在站点jwt.io中,我有以下内容:

标题:

代码语言:javascript
复制
{
   "alg": "HS256"
}

有效载荷:

代码语言:javascript
复制
{
    "sub": "1234567890",
    "name": "John Doe",
    "iat": 1516239022
}

核实签名:

代码语言:javascript
复制
HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    Fdh9u8rINxfivbrianbbVT1u232VQBZYKx1HGAGPt2I
) 

秘密base64未被编码。

现在,我尝试用jose4j再现这种情况,然后在编码字段上得到相同的值,即:

代码语言:javascript
复制
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.jOJ7G4oijaDk9Tr4ntAXczd6PlI4oVvBU0_5cf7oaz4

然后:

代码语言:javascript
复制
    Key key = new HmacKey("Fdh9u8rINxfivbrianbbVT1u232VQBZYKx1HGAGPt2I".getBytes(StandardCharsets.UTF_8));  
    JsonWebEncryption jwe = new JsonWebEncryption();
    String payload = Json.createObjectBuilder()
            .add("sub", "1234567890")
            .add("name", "John Doe")
            .add("iat", "1516239022")
            .build()
            .toString();
    jwe.setPayload(payload);
    jwe.setHeader("alg", "HS256");
    jwe.setKey(key);
    String serializedJwe = jwe.getCompactSerialization();
    System.out.println("Serialized Encrypted JWE: " + serializedJwe);

然而,我得到了这个错误:

org.jose4j.lang.InvalidAlgorithmException: ECDH+ A128KW,ECDH+ A192KW,ECDH+A192KW,ECDH+A192 ES,ECDH+ A256KW,PBES-HS256+A128KW,PBES2-ES 384+A192KW,PBES-HS512+A256KW,A128GCMKW,A192GCMKW,A256GCMKW)。

EN

回答 1

Stack Overflow用户

发布于 2021-06-11 21:36:10

HS256是一个JWS算法,因此您需要使用JsonWebSignature而不是JsonWebEncryption来完成您想要做的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67924771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档