首页 > 编程知识 正文

jwt在线解密,jwt公钥解密

时间:2023-05-06 16:13:10 阅读:208005 作者:4605

简介

JWT,JSON WEB TOKEN,是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范;

该工具类可快速实现jwt秘钥的加密和解密,适用于初学者快速入手;

项目实践 package com.sixmonth.micro.serv.page.common.jwt;import java.util.Date;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;import com.alibaba.fastjson.JSONObject;import com.sixmonth.micro.serv.common.util.UUIDUtils;import io.jsonwebtoken.Claims;import io.jsonwebtoken.ExpiredJwtException;import io.jsonwebtoken.JwtBuilder;import io.jsonwebtoken.Jwts;import io.jsonwebtoken.MalformedJwtException;import io.jsonwebtoken.SignatureAlgorithm;import io.jsonwebtoken.SignatureException;import io.jsonwebtoken.UnsupportedJwtException;/** * JWTUtils工具类,生成jwt和解析jwt * JSON WEB TOKEN 结构组成: * (1)Header(头部):包含加密算法,通常直接使用 HMAC SHA256 * (2)Payload(负载):存放有效信息,比如消息体、签发者、过期时间、签发时间等 * (3)Signature(签名):由header(base64后的)+payload(base64后的)+secret(秘钥)三部分组合,然后通过head中声明的算法进行加密 * @author sixmonth * @date 2019年3月20日 * */public class JWTUtils {static String SECRETKEY = "KJHUhjjJYgYUllVbXhKDHXhkSyHjlNiVkYzWTBac1Yxkjhuad";/** * 由字符串生成加密key * * @return */public static SecretKey generalKey(String stringKey) {byte[] encodedKey = Base64.decodeBase64(stringKey);SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");return key;}/** * 创建jwt * @param id 唯一id,uuid即可 * @param subject json形式字符串或字符串,增加用户非敏感信息存储,如用户id或用户账号,与token解析后进行对比,防止乱用 * @param expirationDate 生成jwt的有效期,单位秒 * @return jwt token * @throws Exception */public static String createJWT(String uuid, String subject, long expirationDate) throws Exception {SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;long nowMillis = System.currentTimeMillis();Date now = new Date(nowMillis);SecretKey key = generalKey(SECRETKEY);JwtBuilder builder = Jwts.builder().setIssuer("").setId(uuid).setIssuedAt(now).setSubject(subject).signWith(signatureAlgorithm, key);if (expirationDate >= 0) {long expMillis = nowMillis + expirationDate*1000;Date exp = new Date(expMillis);builder.setExpiration(exp);}return builder.compact();}/** * 解密jwt,获取实体 * @param jwt */public static Claims parseJWT(String jwt) throws ExpiredJwtException, UnsupportedJwtException,MalformedJwtException, SignatureException, IllegalArgumentException {SecretKey key = generalKey(SECRETKEY);Claims claims = Jwts.parser().setSigningKey(key).parseClaimsJws(jwt).getBody();return claims;}/*** 实例演示*/public static void main(String[] args) {try {JSONObject subject = new JSONObject(true);subject.put("tem", "哈哈哈");subject.put("userName", "sixmonth");String token = createJWT(UUIDUtils.getUUID(), subject.toJSONString(), 10);//10秒过期//System.out.println(token);Claims claims = parseJWT(token);System.out.println("解析jwt:"+claims.getSubject());JSONObject tem = JSONObject.parseObject(claims.getSubject());System.out.println("获取json对象内容:"+tem.getString("userName"));System.out.println(claims.getExpiration()+"///"+claims.getExpiration().getTime());} catch (Exception e) {e.printStackTrace();}}}

添加依赖

<!-- jjwt支持 --><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.7.0</version></dependency><!--commons-codec --><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId></dependency> 总结

实践出真知,自己动手,丰衣足食!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。