1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
| package com.truly.utils;
import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException;
/** * @ClassName MD5Util * @Description MD5工具类 * @Author * @Date 2021/6/23 11:47 下午 * @Version 1.0 */ public class MD5Util {
static final char hexDigits[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; static final char hexDigitsLower[] = { '0', '1', '2', '3', '4', '5', '6', '7','8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
/** * @Description //对字符串 MD5 无盐值加密 * @author dsp * @date 2021/6/23 * @param plainText 传入要加密的字符串 * @return java.lang.String MD5加密后生成32位(小写字母+数字)字符串 */ public static String MD5Lower(String plainText) { try { // 获得MD5摘要算法的 MessageDigest 对象 MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要 md.update(plainText.getBytes());
// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值。1 固定值 return new BigInteger(1, md.digest()).toString(16); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } }
/** * @Description // 对字符串 MD5 加密 * @author dsp * @date 2021/6/23 * @param plainText 传入要加密的字符串 * @return java.lang.String MD5加密后生成32位(大写字母+数字)字符串 */ public static String MD5Upper(String plainText) { try { // 获得MD5摘要算法的 MessageDigest 对象 MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要 md.update(plainText.getBytes());
// 获得密文 byte[] mdResult = md.digest(); // 把密文转换成十六进制的字符串形式 int j = mdResult.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = mdResult[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf];// 取字节中高 4 位的数字转换, >>> 为逻辑右移,将符号位一起右移 str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换 } return new String(str); } catch (Exception e) { e.printStackTrace(); return null; } }
/** * @Description //对字符串 MD5 加盐值加密 * @author dsp * @date 2021/6/23 * @param plainText 传入要加密的字符串 * @param saltValue 传入要加的盐值 * @return java.lang.String MD5加密后生成32位(小写字母+数字)字符串 */ public static String MD5Lower(String plainText, String saltValue) { try { // 获得MD5摘要算法的 MessageDigest 对象 MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要 md.update(plainText.getBytes()); md.update(saltValue.getBytes());
// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符 // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值。1 固定值 return new BigInteger(1, md.digest()).toString(16); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } }
/** * @Description //对字符串 MD5 加盐值加密 * @author dsp * @date 2021/6/23 * @param plainText 传入要加密的字符串 * @param saltValue 传入要加的盐值 * @return java.lang.String MD5加密后生成32位(大写字母+数字)字符串 */ public static String MD5Upper(String plainText, String saltValue) { try { // 获得MD5摘要算法的 MessageDigest 对象 MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要 md.update(plainText.getBytes()); md.update(saltValue.getBytes());
// 获得密文 byte[] mdResult = md.digest(); // 把密文转换成十六进制的字符串形式 int j = mdResult.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = mdResult[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { e.printStackTrace(); return null; } }
/** * @Description //MD5加密后生成32位(小写字母+数字)字符串,同 MD5Lower() 一样 * @author dsp * @date 2021/6/23 * @param plainText * @return java.lang.String */ public final static String MD5(String plainText) { try { MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(plainText.getBytes("UTF-8"));
byte[] md = mdTemp.digest(); int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigitsLower[byte0 >>> 4 & 0xf]; str[k++] = hexDigitsLower[byte0 & 0xf]; } return new String(str); } catch (Exception e) { return null; } }
/** * @Description //校验MD5码 * @author dsp * @date 2021/6/23 * @param text 要校验的字符串 * @param md5 md5值 * @return boolean 校验结果 */ public static boolean valid(String text, String md5) { return md5.equals(MD5(text)) || md5.equals(MD5(text).toUpperCase()); }
}
|