自封装 ------ 密码加密与加盐工具类(外露加密与校验方法)

迫于项目需求,编写了一个 MD5加密再加盐的工具类,代码如下:外露 加密方法与校验方法

import java.security.MessageDigest;
import java.util.UUID;

/**
 * @author:xingquanxiang createTime:2020/1/10 18:47
 * description: 加密加盐工具类, 带加密 和 校验
 */
public class PasswordUtil {
	/**
	 * md5加密处理
	 * @param s
	 * @return
	 */
	private static String md5(String s) {
	    try {
	    	//MessageDigest是封装md5算法的工具对象还支持SHA算法
	        MessageDigest md = MessageDigest.getInstance("MD5");
	        //通过digest拿到的任意字符串,得到的bates都是等长的
	        byte[] bytes = md.digest(s.getBytes("utf-8"));
	        return toHex(bytes);
	    }
	    catch (Exception e) {
	        throw new RuntimeException(e);
	    }
	}


	private static String toHex(byte[] bytes) {
		//toHex的字符串把二进制转换成十六进制
	    final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
	    StringBuilder ret = new StringBuilder(bytes.length * 2);
	    //循环判断是为了补位操作
	    for (int i=0; i<bytes.length; i++) {
	        ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
	        ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
	    }
	    return ret.toString();
	}

	/**
	 * 生成随机字符串 长度为 8
	 * @return
	 */
	private static String salt(){
		//使用UUID通用唯一识别码,取第一个-前面的值
		UUID uuid = UUID.randomUUID();
		String[] arr = uuid.toString().split("-");
		return arr[0];
	}

	/**
	 * 对密码进行加密加盐操作
	 * @param password
	 * @return
	 */
	public static String encode(String password){
		//加密
		String hexPwd = md5(password);
		//生成盐
		String salt = salt();
		//加盐操作
		StringBuilder builder = new StringBuilder(hexPwd);
		builder.insert(18, salt);
		//返回加密加盐后的字符串
		return builder.toString();
	}

	/**
	 * 校对密码是否匹配,匹配则返回true
	 * @param password
	 * @param dbPassword
	 * @return
	 */
	public static boolean match(String password, String dbPassword){
		StringBuilder builder = new StringBuilder(dbPassword);
		//去盐操作,生成md5加密后原始字符
		builder.replace(18, 26, "");
		//加密新密码,生成md5加密字符
		password = md5(password);
		//校对加密字符与原始字符是否匹配
		return password.equals(builder.toString());
	}

	public static void main(String[] args) {
		String password = "cndsHFHknvildhnoiseygh/;'.''..";
		String encode = encode(password);
		System.out.println(match(password, encode));
	}

}

 

发布了82 篇原创文章 · 获赞 3 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章