You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java生成指定格式的128位MD5哈希(Base64编码,44位)?

解决方案

你需要的44位Base64字符串,并非MD5哈希字节数组直接编码的结果,而是先将MD5哈希转为32位十六进制字符串,再对该字符串的字节数组进行Base64编码得到的。

正确实现代码

import java.security.MessageDigest;
import java.util.Base64;

public class Md5HexToBase64 {
    public static void main(String[] args) throws Exception {
        byte[] part = "your_input_data".getBytes("UTF-8"); // 替换为你的输入字节数组

        // 1. 计算MD5哈希值
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] md5Digest = md.digest(part);

        // 2. 将MD5字节数组转为32位小写十六进制字符串
        StringBuilder hexStrBuilder = new StringBuilder();
        for (byte b : md5Digest) {
            // 确保每个字节转为两位十六进制字符,不足补0
            String hex = Integer.toHexString(0xFF & b);
            if (hex.length() == 1) {
                hexStrBuilder.append('0');
            }
            hexStrBuilder.append(hex);
        }
        String md5Hex = hexStrBuilder.toString();

        // 3. 将十六进制字符串按UTF-8编码为字节数组,再做Base64编码
        String finalBase64 = Base64.getEncoder().encodeToString(md5Hex.getBytes("UTF-8"));
        System.out.println(finalBase64); // 输出44位的目标格式字符串
    }
}

为什么之前的方法不符合预期

你之前直接对MD5的16字节哈希数组做Base64编码,得到的是24位(含等号)的字符串,这是因为16字节的Base64编码长度为((16 + 2) / 3) * 4 = 24。而你需要的44位结果,是基于32位十六进制字符串的Base64编码,32字节的Base64编码长度为((32 + 2) / 3) * 4 = 44,完全匹配示例格式。

内容的提问来源于stack exchange,提问作者Ivan B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 15:38:19