package com.ttstd.iconloader;

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

public class MD5Util {
    public static String getMD5(String input) {
        try {
            // 1. 获取 MD5 消息摘要实例
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 2. 将输入字符串转换为字节数组。建议指定编码（如UTF-8），但使用默认平台编码时通常可省略。
            byte[] inputBytes = input.getBytes(); // 如需指定编码，可使用 input.getBytes("UTF-8")
            // 3. 计算消息摘要，得到128位（16字节）的哈希值
            byte[] digest = md.digest(inputBytes);
            // 4. 将字节数组转换为十六进制字符串表示
            StringBuilder sb = new StringBuilder();
            for (byte b : digest) {
                // 每个字节转换为两位十六进制数，不足两位前面补零
                sb.append(String.format("%02x", b & 0xff));
            }
            // 5. 返回最终的32位十六进制字符串
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            // MD5算法是所有Java标准平台必须支持的，此异常通常不会抛出
            throw new RuntimeException("MD5 algorithm not available", e);
        }
        // 若指定了编码（如UTF-8），需捕获 UnsupportedEncodingException，但UTF-8通常也受支持
    }
}