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

VB转Java实现MD5哈希结果不一致问题排查求助

VB转Java MD5哈希结果不一致的问题排查与修复

问题根源分析

你的两段代码存在三个关键差异,直接导致哈希结果不一致:

  1. 字符编码不匹配
    VB中使用的UnicodeEncoding对应UTF-16LE(小端序),而Java代码错误地采用了UTF-8编码,还额外添加了UTF-8的BOM(0xEFBBBF),完全偏离了VB的编码逻辑。

  2. MD5计算流程错误
    VB直接对编码后的字节数组计算MD5,再将哈希结果的字节数组直接转Base64;但Java代码先把MD5哈希转成十六进制字符串,再将该字符串转成UTF-8字节后才做Base64编码,多了一次无意义的字符串转换,导致结果完全不同。

  3. MD5实例化方式不规范
    Java代码里直接new MD5()不符合JDK标准用法,正确方式是通过MessageDigest.getInstance("MD5")获取MD5实例。

修正后的Java代码

private String PasswortlevelHash(String strPasswortlevel, String strDay, String strMonth, String strYear) throws Exception {
    // 获取标准MD5实例
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    
    String strForHash = "MS-U4_2022_10_10setup";
    // 使用UTF-16LE编码,对应VB的UnicodeEncoding
    byte[] bytHashNeu = strForHash.getBytes("UTF-16LE");
    // 计算MD5哈希
    byte[] hashBytes = md5.digest(bytHashNeu);
    // 直接对哈希字节数组做Base64编码
    return Base64.getEncoder().encodeToString(hashBytes);
}

验证结果

修正后的代码运行结果会和VB代码完全一致:h1qKTNN456AqTZUPPaft3Q==

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:24:29