JWT使用公钥解密

添加JWT工具包

<dependency>
<groupId>io.jsonwebtoken</groupId>
	<artifactId>jjwt-api</artifactId>
	<version>0.10.5</version>
</dependency>
<dependency>
	<groupId>io.jsonwebtoken</groupId>
	<artifactId>jjwt-impl</artifactId>
	<version>0.10.5</version>
	<scope>runtime</scope>
</dependency>
<dependency>
	<groupId>io.jsonwebtoken</groupId>
	<artifactId>jjwt-jackson</artifactId>
	<version>0.10.5</version>
	<scope>runtime</scope>
</dependency>

代码

public class JwtTest {
    // 公钥
    public static String publicKey = "-----BEGIN CERTIFICATE-----\n" +
            "MIIDmzCCAoOgAwIBAgIEHnAgtDANBgkqhkiG9w0BAQsFADB+MQswCQYDVQQGEwJDQTEQMA4GA1UE\n" +
            "CBMHT250YXJpbzEUMBIGA1UEBxMLTWlzc2lzc2F1Z2ExJjAkBgNVBAoTHU5ldHdvcmsgTmV3IFRl\n" +
            "Y2hub2xvZ2llcyBJbmMuMQwwCgYDVQQLEwNERVYxETAPBgNVBAMTCFN0ZXZlIEh1MB4XDTE2MDkw\n" +
            "MTE2MTYxNVoXDTI2MDcxMTE2MTYxNVowfjELMAkGA1UEBhMCQ0ExEDAOBgNVBAgTB09udGFyaW8x\n" +
            "FDASBgNVBAcTC01pc3Npc3NhdWdhMSYwJAYDVQQKEx1OZXR3b3JrIE5ldyBUZWNobm9sb2dpZXMg\n" +
            "SW5jLjEMMAoGA1UECxMDREVWMREwDwYDVQQDEwhTdGV2ZSBIdTCCASIwDQYJKoZIhvcNAQEBBQAD\n" +
            "ggEPADCCAQoCggEBALrlxMtDb60DogElf4TBz504tRheZimAE0dJL/Yby4nacJdqvc5l4z+WWpDf\n" +
            "rI9krQ2Yi9yvhwAP+PrR6gWcIqWP4cpNE7XIAUDgr4CtyI7CptT/lpjtbkz4DGCMmaeDn0jqHqJt\n" +
            "SeSZGfwVu5zAGm8n4sHatjnnxBI/iWzkTII3V4xv0WeK37szNTEd+ly2ag7n2IV5zNnYmqZTeMQm\n" +
            "J2ENS+IwAG3ENtiVtrVTx/2bGtqutJjtdxsN58/cUG/guRyMT6OPI8Yi3ZzevdvRbxadyhEl/Kaw\n" +
            "6vJcdxmJI3tp4lx+p6sAxOWa7aapJe4JxutAQqzv0GKdVjoHKQ1wB60CAwEAAaMhMB8wHQYDVR0O\n" +
            "BBYEFIPF9SBd06RWU1eDL73CKfy01lavMA0GCSqGSIb3DQEBCwUAA4IBAQAoaKZGOak3Upz/ordF\n" +
            "slZoJuZlCu7jnKQEjYwHf3DNxcd1WmgFPtMcna6pW0VUxPIfidEA6VCMsGoK1RvshB0SjrRdCht6\n" +
            "5qPXs9kV3NW0WvMiwDSYZZ9HgaZ9efTe5E9Fzc7ltKrE43L6k8NJcaEEWEdpdjFbrAqH4I+j/Vro\n" +
            "K3OhIo062fXjas5ipL4gF+3ECImjWzirQP8UiAfM0/36x7rtAu3btH/qI9hSyx39LBPPE5AsDJZ4\n" +
            "dSMwNTW1gqmBAZIj+zQ/RD5dyWfPwON7Q+t96YbK6WBuYo0xy+I+PjcUgrWYWP3N24hlq8ZBIei+\n" +
            "BudoEVJlIlmS0aRCuP8n\n" +
            "-----END CERTIFICATE-----";

    public static String jwt_token = "eyJraWQiOiIxMDAiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJ1cm46Y29tOm5ldHdvcmtudDpvYXV0aDI6djEiLCJhdWQiOiJ1cm46Y29tLm5ldHdvcmtudCIsImV4cCI6MTU2MjU2NjYxMywianRpIjoiSzZrcDJQMnN2RDhVbVNOTmdqT3ZXdyIsImlhdCI6MTU2MjU2NjAxMywibmJmIjoxNTYyNTY1ODkzLCJ2ZXJzaW9uIjoiMS4wIiwidXNlcl9pZCI6ImNoZW5taW5nIiwidXNlcl90eXBlIjpudWxsLCJjbGllbnRfaWQiOiI3NTk5OTYyOC1mNjcxLTQ4NzQtOWEyZi0xNDliM2IxZDA2YzIiLCJzY29wZSI6WyJhY3QuciIsImFjdC53Il19.c-PFcbiFvNl02wNNOgGn9uvEAQv3_EwTPVhmNM14IcokcdufYHUUVsPrbIfU-9gd4DlTuKUEWc4ry3PEggIZBs2gVKjN4Fvbs7WdRBBRWZhNxfMiiXT9z-4OxDs5GhOA06JFi4eul1jy-JPOtN2KSKlDrp09xQyFtVNQRCbgF7Klp_XDRbw9Pmjtm0OHTvtMd4dDsgsbwhEcYG6jHgEfhPHbgWTWGndzazW_4Z2kLIi-CukwT0_UCt3MUsy_lMlKbxSs-VUyV47NGqfE7PoEalIaY_iG4dNze8OtPwtY4YAIn3P3Qv3YvZnlrCzocE-REDAG916hT-kAZWBe7wMs_w";

    public static void main(String[] args) throws Exception {
        PublicKey publicKey = CertificateFactory.getInstance("X.509")
                .generateCertificate(new ByteArrayInputStream(JwtTest.publicKey.getBytes()))
                .getPublicKey();

        Claims claims = null;
        try {
            claims = Jwts.parser().setSigningKey(publicKey)
                    .parseClaimsJws(jwt_token).getBody();
        } catch (ExpiredJwtException e) {
            System.out.println(e.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println(claims.get("user_id"));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java使用JWT(JSON Web Token)进行加密和解密是一种常见的身份验证和授权机制。JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。 1. 头部(Header):包含了算法和令牌类型等信息,通常使用Base64编码表示。 2. 载荷(Payload):包含了要传输的数据,比如用户ID、角色等信息,同样使用Base64编码表示。 3. 签名(Signature):使用私钥对头部和载荷进行签名,以确保数据的完整性和真实性。 下面是使用Java进行JWT加密和解密的步骤: 1. 导入相关依赖:在项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.2</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> ``` 2. 创建JWT生成器:使用`Jwts.builder()`创建一个JWT生成器对象。 ```java JwtBuilder builder = Jwts.builder(); ``` 3. 设置头部和载荷信息:使用`setHeader()`和`setClaims()`方法设置头部和载荷信息。 ```java builder.setHeader(headerMap); builder.setClaims(claimsMap); ``` 4. 设置签名:使用`signWith()`方法设置签名算法和私钥。 ```java builder.signWith(SignatureAlgorithm.HS256, secretKey); ``` 5. 生成JWT使用`compact()`方法生成最终的JWT字符串。 ```java String jwt = builder.compact(); ``` 6. 解密JWT使用`Jwts.parser()`创建一个JWT解析器对象,并使用`setSigningKey()`方法设置公钥密钥。 ```java Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody(); ``` 以上是使用Java进行JWT加密和解密的基本步骤。需要注意的是,生成JWT时需要使用私钥进行签名,解密JWT时需要使用公钥密钥进行验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值