All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.biz.common.utils.MD5Util Maven / Gradle / Ivy

There is a newer version: 1.5.1
Show newest version
package com.biz.common.utils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * MD5工具类,提供字符串和文件的MD5加密计算功能。
 *
 * @author francis
 * @create 2024-05-28 11:07
 **/
public class MD5Util {

    /**
     * MD5算法标识
     */
    private static final String MD5 = "MD5";

    /**
     * 计算字符串的MD5哈希值。
     *
     * @param input 待加密的字符串。
     * @return 字符串的MD5哈希值,以32位小写十六进制字符串形式表示。
     */
    public static String getMD5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance(MD5);
            byte[] messageDigest = md.digest(input.getBytes());
            return bytesToHex(messageDigest);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("MD5 加密过程中出现异常,无法获取MD5 MessageDigest实例", e);
        }
    }

    /**
     * 计算文件的MD5哈希值。
     *
     * @param file 待计算哈希值的文件。
     * @return 文件的MD5哈希值,以32位小写十六进制字符串形式表示。
     */
    public static String getFileMD5(File file) {
        try (InputStream fis = Files.newInputStream(file.toPath())) {
            MessageDigest md = MessageDigest.getInstance(MD5);
            byte[] buffer = new byte[8192]; // 增大缓冲区大小
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                md.update(buffer, 0, bytesRead);
            }
            byte[] messageDigest = md.digest();
            return bytesToHex(messageDigest);
        } catch (NoSuchAlgorithmException | IOException e) {
            throw new RuntimeException("MD5 加密过程中出现异常", e);
        }
    }


    /**
     * 将字节数组转换为十六进制字符串。
     *
     * @param bytes 待转换的字节数组。
     * @return 转换后的十六进制字符串。
     */
    private static String bytesToHex(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) {
                hexString.append('0');
            }
            hexString.append(hex);
        }
        return hexString.toString();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy