java-加密、解密算法

rsa2048、sha256

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

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

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

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

签名方法有两种:

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

2、HS256对应

内容主要由三部分构成:

 开发代码(依赖项):

io.jsonwebtokenjjwt0.9.1
// 如果java版本号是java8以后则需要加一下三个依赖,否者上面一个就好
javax.xml.bindjaxb-api

com.sun.xml.bindjaxb-impl4.0.0

com.sun.xml.bindjaxb-core4.0.0

加减密实例代码:

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 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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部