MD5Util.java 2.98 KB
package com.xly.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * MD5加密工具类
 */
public class MD5Util {

    /**
     * 将字符串进行MD5加密
     * @param input 输入字符串
     * @return MD5加密后的32位小写字符串
     */
    public static String encrypt(String input) {
        if (input == null || input.isEmpty()) {
            return null;
        }

        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(input.getBytes());

            // 将字节数组转换为十六进制字符串
            StringBuilder hexString = new StringBuilder();
            for (byte b : messageDigest) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    hexString.append('0');
                }
                hexString.append(hex);
            }
            return hexString.toString();

        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("MD5加密失败", e);
        }
    }

    /**
     * 将字符串进行MD5加密(大写)
     * @param input 输入字符串
     * @return MD5加密后的32位大写字符串
     */
    public static String encryptToUpperCase(String input) {
        String result = encrypt(input);
        return result != null ? result.toUpperCase() : null;
    }

    /**
     * 验证字符串与MD5值是否匹配
     * @param input 输入字符串
     * @param md5 MD5值
     * @return 是否匹配
     */
    public static boolean verify(String input, String md5) {
        String encrypted = encrypt(input);
        return encrypted != null && encrypted.equalsIgnoreCase(md5);
    }

    /**
     * 获取文件的MD5值
     * @param bytes 文件字节数组
     * @return 文件MD5值
     */
    public static String getFileMD5(byte[] bytes) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(bytes);

            StringBuilder hexString = new StringBuilder();
            for (byte b : messageDigest) {
                String hex = Integer.toHexString(0xff & b);
                if (hex.length() == 1) {
                    hexString.append('0');
                }
                hexString.append(hex);
            }
            return hexString.toString();

        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("文件MD5计算失败", e);
        }
    }

    /**
     * MD5加盐加密
     * @param input 输入字符串
     * @param salt 盐值
     * @return 加盐后的MD5值
     */
    public static String encryptWithSalt(String input, String salt) {
        return encrypt(input + salt);
    }

    /**
     * 双重MD5加密
     * @param input 输入字符串
     * @return 双重MD5加密结果
     */
    public static String doubleEncrypt(String input) {
        String first = encrypt(input);
        return encrypt(first);
    }
}