自封裝 ------ 密碼加密與加鹽工具類(外露加密與校驗方法)

迫於項目需求,編寫了一個 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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章