MD5工具类的编写和JWT工具类的编写

本文介绍了如何在Java中实现MD5加密工具类,用于安全存储密码。同时,展示了JWT(JSON Web Token)工具类的实现,包括生成和验证JWT,以及设置过期时间和加密秘钥。在测试部分,演示了JWT工具类的使用过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

密码往往不便直接存放在数据库中,所以需要写一个MD5工具类,下面是写法


import java.security.MessageDigest;

/**
 * 通用工具类
 */
public class CommonUtils {

    /**
     * MD5加密工具类
     * @param data
     * @return
     */
    public static String MD5(String data)  {
        try {
            java.security.MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] array = md.digest(data.getBytes("UTF-8"));
            StringBuilder sb = new StringBuilder();
            for (byte item : array) {
                sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));
            }

            return sb.toString().toUpperCase();
        } catch (Exception exception) {
        }
        return null;

    }


}

下面是JWT工具类

package net.xdclass.online_xdclass.utils;

/**
 * @author Jjw
 * @version 1.0
 * @date 2022/3/31 22:50
 * @useTo:
 */

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import net.xdclass.online_xdclass.model.entiy.User;

import java.util.Date;

/**
 * Jwt工具类
 * 注意点:
 * 1、生成的token, 是可以通过base64进行解密出明文信息
 * 2、base64进行解密出明文信息,修改再进行编码,则会解密失败
 * 3、无法作废已颁布的token,除非改秘钥
 */
public class JWTUtils {

    /**
     * 过期时间,一周
     */
    private  static final long EXPIRE = 60000 * 60 * 24 * 7;
//    private  static final long EXPIRE = 1;


    /**
     * 加密秘钥
     */
    private  static final String SECRET = "xdclass.net168";


    /**
     * 令牌前缀
     */
    private  static final String TOKEN_PREFIX = "xdclass";


    /**
     * subject(主题)
     */
    private  static final String SUBJECT = "xdclass";

    /**
     * 根据用户信息,生成令牌(方法多种多样)
     */
    public static String geneJsonWebToken(User user){
//token令牌的方法多种多样,但大部分都以Jwts.builder()开头,
// 以setIssuedAt+setExpiration+signWith结尾
        String token= Jwts.builder().setSubject(SUBJECT)
                .claim("head_img",user.getHeadImg())
                .claim("id",user.getId())
                .claim("name",user.getName())
                .setIssuedAt(new Date())
//                失效时间currentTimeMillis获取毫秒
                .setExpiration(new Date(System.currentTimeMillis()+EXPIRE))
//compact紧凑一些
                .signWith(SignatureAlgorithm.HS256,SECRET).compact();
//        加个前缀
        token=TOKEN_PREFIX+token;

        return token;
    }

    public static Claims checkJWT(String token){
//parser专门解析密钥.setSigningKey用原来的密钥解密,
// parseClaimsJws把所有的信息解析成各种数据
//        因为可能存在解密失败,所以最好放在trycatch中
        try {
            final Claims claims= Jwts.parser().setSigningKey(SECRET)
                    .parseClaimsJws(token.replace(TOKEN_PREFIX,"")).getBody();
            return claims;
        }catch (Exception e){
            return null;
        }
    }
}

对这个工具类的测试

package net.xdclass.online_xdclass;

import io.jsonwebtoken.Claims;
import net.xdclass.online_xdclass.model.entiy.User;
import net.xdclass.online_xdclass.utils.JWTUtils;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class OnlineXdclassApplicationTests {


	/**
	 * 测试JWT工具类
	 */
	@Test
	public void testGeneJwt() {
		User user=new User();
		user.setId(66);
		user.setName("老王123");
		user.setHeadImg("peng");
//过期时间测试
		try {
			Thread.sleep(4000L);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		String token= JWTUtils.geneJsonWebToken(user);

		System.out.println(token);

		Claims claims=JWTUtils.checkJWT(token);

		System.out.println(claims.get("name"));
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值