001package top.cenze.utils.crypt; 002 003import java.security.MessageDigest; 004 005/** 006 * MD5摘要算法加密工具 007 * 008 * @author chengze 009 * @date 2023-11-14 22:10 010 */ 011public class MD5Util { 012 static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; 013 static String MD5 = "MD5"; 014 015 /** 016 * 加密 017 * @param data 018 * @param salt 019 * @return 020 * @throws Exception 021 */ 022 public static String sign(String data, String salt) throws Exception { 023 //得到明文的字节数组 024 byte[] btInput = (data + salt).getBytes(); 025 // 创建一个提供信息摘要算法的对象(MD5摘要算法) 026 MessageDigest messageDigest = MessageDigest.getInstance(MD5); 027 // 使用指定的字节更新摘要 028 messageDigest.update(btInput); 029 // 得到二进制的密文 030 byte[] encryptData = messageDigest.digest(); 031 // 把密文转换成十六进制的字符串形式 032 String encryptDataStr = bytesToHex(encryptData); 033 return encryptDataStr; 034 } 035 036 /** 037 * 验证密码 038 * @param data 039 * @param salt 040 * @param sign 041 * @return 042 * @throws Exception 043 */ 044 public static boolean verifySign(String data, String salt, String sign) throws Exception { 045 //调用加签方法,看加签后的签名是否和收到的一致 046 String encryptData = sign(data, salt); 047 if (encryptData.equals(sign)){ 048 return true; 049 }else { 050 return false; 051 } 052 } 053 054 //将byte数组转化为十六进制字符串 055 public static String bytesToHex(byte[] bytes) { 056 int k = 0; 057 char[] hexChars = new char[bytes.length * 2]; 058 for ( int i = 0; i < bytes.length; i++ ) { 059 byte byte0 = bytes[i]; 060 hexChars[k++] = hexDigits[byte0 >>> 4 & 0xf]; 061 hexChars[k++] = hexDigits[byte0 & 0xf]; 062 } 063 return new String(hexChars); 064 } 065}