java加密算法之JWT篇

加密
字符串
public static String token(String subject, String secretKey, Date date) {
    Key key = decodeKey(secretKey);
    String token = Jwts.builder().setExpiration(date).setSubject(subject).signWith(SignatureAlgorithm.HS256, key).compact();
    String base64Token = new BASE64Encoder().encode(token.getBytes());
    base64Token = base64Token.replace('=', '*');
    base64Token = base64Token.replace("
", "");
    base64Token = base64Token.replace("
", "");
    return base64Token;
}
多数据
public static String tokenParams(Map<String, Object> claims, String secretKey, Date date) {
    Key key = decodeKey(secretKey);
    String token = Jwts.builder().setExpiration(date).setClaims(claims).signWith(SignatureAlgorithm.HS256, key).compact();
    String base64Token = new BASE64Encoder().encode(token.getBytes());
    base64Token = base64Token.replace('=', '*');
    base64Token = base64Token.replace("
", "");
    base64Token = base64Token.replace("
", "");
    return base64Token;
}
解密
字符串
   public static String verify(String token, String secretKey) {
    try {
        token = token.replace('*', '=');
        Key key = decodeKey(secretKey);
        String decodeToken = new String(new BASE64Decoder().decodeBuffer(token));
        String subject = Jwts.parser().setSigningKey(key).parseClaimsJws(decodeToken).getBody().getSubject();
        return subject;
    } catch (Exception e) {

    }
    return null;
}
多数据
  public static Map<String, Object> verifyParams(String token, String secretKey) {
    try {
        token = token.replace('*', '=');
        Key key = decodeKey(secretKey);
        String decodeToken = new String(new BASE64Decoder().decodeBuffer(token));
        Map<String, Object> claims = Jwts.parser().setSigningKey(key).parseClaimsJws(decodeToken).getBody();
        return claims;
    } catch (Exception e) {

    }
    return null;
}
测试
public static void main(String[] args) {
    String subject = "A478YSKJDFHJL84673IUASD8";
    String secretKey = generateSecretKey();
    Date date = new Date();
    String strToken = token(subject,secretKey,MyDateUtils.addDays(date,1));
    System.out.println("There is token result :"+strToken);
    String verify = verify(strToken,secretKey);
    System.out.println("There is verify token result :"+verify);
    Map<String,Object> params = new HashMap<>();
    params.put("key","value");
    String objToken = tokenParams(params, secretKey, MyDateUtils.addDays(date, 1));
    System.out.println("There is token object result :"+objToken);
    Map<String,Object> verifyObj = verifyParams(objToken,secretKey);
    System.out.println("There is verify object token result :"+JsonUtils.toJson(verifyObj));
}
测试结果

在这里插入图片描述

token过期测试
public static void main(String[] args) {
    String subject = "A478YSKJDFHJL84673IUASD8";
    String secretKey = generateSecretKey();
    Date date = new Date();
    String strToken = token(subject,secretKey,MyDateUtils.addDays(date,-1));
    System.out.println("There is token result :"+strToken);
    String verify = verify(strToken,secretKey);
    System.out.println("There is verify token result :"+verify);
}
token过期测试结果

在这里插入图片描述

全代码
public class JwtUtils {

    public static String secretKey = "";

    public static String generateSecretKey() {
        String secretKey = "";
        String uuid = new BASE64Encoder().encode(UUID.randomUUID().toString().getBytes());
        secretKey = uuid;
        return secretKey;
    }

    public static Key generateKey(String secretKey) {
        Key key = null;
        try {
            byte[] keyBytes = new BASE64Decoder().decodeBuffer(secretKey);
            key = new SecretKeySpec(keyBytes, SignatureAlgorithm.HS256.getJcaName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return key;
    }

    public static Key decodeKey(String secretKey) {
        Key key = null;
        try {
            byte[] keyBytes = new BASE64Decoder().decodeBuffer(secretKey);
            key = new SecretKeySpec(keyBytes, SignatureAlgorithm.HS256.getJcaName());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return key;
    }

    public static String tokenParams(Map<String, Object> claims, String secretKey, Date date) {
        Key key = decodeKey(secretKey);
        String token = Jwts.builder().setExpiration(date).setClaims(claims).signWith(SignatureAlgorithm.HS256, key).compact();
        String base64Token = new BASE64Encoder().encode(token.getBytes());
        base64Token = base64Token.replace('=', '*');
        base64Token = base64Token.replace("
", "");
        base64Token = base64Token.replace("
", "");
        return base64Token;
    }

    public static Map<String, Object> verifyParams(String token, String secretKey) {
        try {
            token = token.replace('*', '=');
            Key key = decodeKey(secretKey);
            String decodeToken = new String(new BASE64Decoder().decodeBuffer(token));
            Map<String, Object> claims = Jwts.parser().setSigningKey(key).parseClaimsJws(decodeToken).getBody();
            return claims;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String token(String subject, String secretKey, Date date) {
        Key key = decodeKey(secretKey);
        String token = Jwts.builder().setExpiration(date).setSubject(subject).signWith(SignatureAlgorithm.HS256, key).compact();
        String base64Token = new BASE64Encoder().encode(token.getBytes());
        base64Token = base64Token.replace('=', '*');
        base64Token = base64Token.replace("
", "");
        base64Token = base64Token.replace("
", "");
        return base64Token;
    }

    public static String verify(String token, String secretKey) {
        try {
            token = token.replace('*', '=');
            Key key = decodeKey(secretKey);
            String decodeToken = new String(new BASE64Decoder().decodeBuffer(token));
            String subject = Jwts.parser().setSigningKey(key).parseClaimsJws(decodeToken).getBody().getSubject();
            return subject;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        String subject = "A478YSKJDFHJL84673IUASD8";
        String secretKey = generateSecretKey();
        Date date = new Date();
        String strToken = token(subject,secretKey,MyDateUtils.addDays(date,-1));
        System.out.println("There is token result :"+strToken);
        String verify = verify(strToken,secretKey);
        System.out.println("There is verify token result :"+verify);
        Map<String,Object> params = new HashMap<>();
        params.put("key","value");
        String objToken = tokenParams(params, secretKey, MyDateUtils.addDays(date, 1));
        System.out.println("There is token object result :"+objToken);
        Map<String,Object> verifyObj = verifyParams(objToken,secretKey);
        System.out.println("There is verify object token result :"+JsonUtils.toJson(verifyObj));
    }
}

>>>源码下载链接>>>

  • 1
    点赞
  • 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、付费专栏及课程。

余额充值