java-加密、解密算法

4 篇文章 0 订阅
本文介绍了如何使用RSA2048和SHA256进行数字签名和加密。通过JWT(JSONWebToken)实现,利用非对称加密算法RS256和对称算法HS256创建和解析令牌,确保数据完整性和安全性。示例代码展示了Java中使用jjwt库创建JWT令牌以及进行签名和验证的过程。
摘要由CSDN通过智能技术生成

rsa2048、sha256

rsa2048对整个文件进行hash算法,生成公钥、私钥后用于数字签名,

sha256通过公钥和私钥,作为证书使用。单板打包后对每个动态库sha256计算颁发证书

sha256签名后,rsa2048进行加密。签名用于校验加密数据没有被更改过

通过JWT(JSON Web Token)进行数字签名

签名方法有两种:

1、RS256对应rsa2028、sha256,是非对称算法(rsa2048公私钥),微服务提供签名信息、其他微服务使用

2、HS256对应

内容主要由三部分构成:

 开发代码(依赖项):

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt</artifactId>
    <version>0.9.1</version>
</dependency>

// 如果java版本号是java8以后则需要加一下三个依赖,否者上面一个就好
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>4.0.0</version>
</dependency>

加减密实例代码:

package com.xzbd;
import io.jsonwebtoken.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.UUID;

@Component
public class JwtUtils {
    private  long time = 1000 * 60 * 60 * 24;
    private  String signature = "admin";
    public void jwt() {
        JwtBuilder jwtBuilder = Jwts.builder();
        String jwtToken = jwtBuilder
                // header
                .setHeaderParam("typ", "JWT")       // 类型
                .setHeaderParam("alg", "HS256")     // 校验方法
                // payload
                .claim("username", "tom")           // 用户名
                .claim("role", "root")              // 角色
                .setSubject("主体")
                .setExpiration(new Date(System.currentTimeMillis() + time))   // 设置有效时间=当前时间+24小时
                .setId(UUID.randomUUID().toString())
                // signature
                .signWith(SignatureAlgorithm.HS256, signature)
                .compact();                               // 拼接
        // 打印签名数据
        System.out.println(jwtToken);
    }
    public void parse() {
        String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJyb290Iiwic3ViIjoi5Li75L2TIiwiZXhwIjoxNjYwNzI1NTY2LCJqdGkiOiI1MzZkYjllNy01YzViLTQwNzYtOGU4NS01YmU1ODczNzE5ZDcifQ.oO7QUWfa1Np8cdjvpsUDo_tzrXsDj7GrPJZV8UikRzA";
        JwtParser jwtParser = Jwts.parser();
        Jws<Claims> claimsJws = jwtParser.setSigningKey(signature).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        System.out.println(claims.get("username"));
        System.out.println(claims.get("role"));
        System.out.println(claims.getId());
        System.out.println(claims.getSubject());
        System.out.println(claims.getExpiration());
    }
}

main函数中如下:

@SpringBootApplication
public class Run {
    public static void main(String[] args) {
        SpringApplication.run(Run.class, args);

        JwtUtils jwtUtils = new JwtUtils();
        jwtUtils.jwt();
        jwtUtils.parse();
    }
}

运行效果如下,生成数据中对上面描述的三部分有符号“.”隔开

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6InRvbSIsInJvbGUiOiJyb290Iiwic3ViIjoi5Li75L2TIiwiZXhwIjoxNjYwNzI1NjY3LCJqdGkiOiIzZjNkNDg0OC1iNjVhLTQwMjYtYTZiYi0wMWQ1OGI0MTU5YTQifQ.7pVyC8ICj_vAVBL-nrtFnmyDzut8wbwpoILwXsDzQdw

tom

root

536db9e7-5c5b-4076-8e85-5be5873719d7

主体

Wed Aug 17 16:39:26 CST 2022

Process finished with exit code 0

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值