package com.ruoyi.common.core.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Util { /** * 给指定字符串按照md5算法去加密 * * @param psd 需要加密的密码 加盐处理 * * @return md5后的字符串 */ public static String encoder(String psd) { try { //加盐处理 psd = psd + "mobilesafe"; //1,指定加密算法类型 MessageDigest digest = MessageDigest.getInstance("MD5"); //2,将需要加密的字符串中转换成byte类型的数组,然后进行随机哈希过程 byte[] bs = digest.digest(psd.getBytes()); // System.out.println(bs.length); //3,循环遍历bs,然后让其生成32位字符串,固定写法 //4,拼接字符串过程 StringBuffer stringBuffer = new StringBuffer(); for (byte b : bs) { int i = b & 0xff; //int类型的i需要转换成16机制字符 String hexString = Integer.toHexString(i); // System.out.println(hexString); if (hexString.length() < 2) { hexString = "0" + hexString; } stringBuffer.append(hexString); } //5,打印测试 System.out.println(stringBuffer.toString()); return stringBuffer.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } /** * MD5加密字符串 * * @param str * @return */ public static String getMD5(String str) { if (StringUtils.isNotEmpty(str)) { try { MessageDigest md = MessageDigest.getInstance("MD5"); md.update(str.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } //32位加密(小写) return buf.toString(); //32位加密(大写) //return buf.toString().toUpperCase(); // 16位的加密(小写) //return buf.toString().substring(8, 24); // 16位的加密(大写) //return buf.toString().substring(8, 24).toUpperCase(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } } return ""; } /** * 获取32位大写 * * @param str * @return */ public static String getMD5_32_upper(String str) { if (StringUtils.isNotEmpty(str)) return getMD5(str).toUpperCase(); return ""; } /** * 获取32位小写 * * @param str * @return */ public static String getMD5_32_lower(String str) { if (StringUtils.isNotEmpty(str)) return getMD5(str).toLowerCase(); return ""; } /** * 获取16位大写 * * @param str * @return */ public static String getMD5_16_upper(String str) { if (StringUtils.isNotEmpty(str)) return getMD5(str).substring(8, 24).toUpperCase(); return ""; } /** * 获取16位小写 * * @param str * @return */ public static String getMD5_16_lower(String str) { if (StringUtils.isNotEmpty(str)) return getMD5(str).substring(8, 24).toLowerCase(); return ""; } }