package com.product.text.message.util; import java.security.MessageDigest; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.apache.commons.codec.binary.Base64; /** * MD5加密/验证工具类 * Copyright PRODUCT-BASE * @Title: PRODUCT-BASE- * @Project: Md5Util * @Date: 2021年6月25日 下午5:09:51 * @Author: 杜洪波 * @Description: */ public class Md5Util { static final char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; /** * 生成MD5码 * * @param plainText 要加密的字符串 * @return md5值 */ public final static String MD5(String plainText) { try { byte[] strTemp = plainText.getBytes("UTF-8"); MessageDigest mdTemp = MessageDigest.getInstance("MD5"); mdTemp.update(strTemp); 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++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { return null; } } /** * 生成MD5码 * * @param plainText 要加密的字符串 * @return md5值 */ public final static String MD5(byte[] plainText) { try { byte[] strTemp = plainText; MessageDigest mdTemp = MessageDigest.getInstance("MD5"); mdTemp.update(strTemp); 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++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { return null; } } /** * 先进行HmacSHA1转码再进行Base64编码 * * @param data 要SHA1的串 * @param key 秘钥 * @return * @throws Exception */ public static String HmacSHA1ToBase64(String data, String key) throws Exception { SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), "HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); mac.init(signingKey); byte[] rawHmac = mac.doFinal(data.getBytes()); return Base64.encodeBase64String(rawHmac); } /** * 校验MD5码 * * @param text 要校验的字符串 * @param md5 md5值 * @return 校验结果 */ public static boolean valid(String text, String md5) { return md5.equals(MD5(text)) || md5.equals(MD5(text).toUpperCase()); } /** * * @param params * @return */ public static String MD5(String... params) { StringBuilder sb = new StringBuilder(); for (String param : params) { sb.append(param); } return MD5(sb.toString()); } }