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

求与JavaScript CryptoJS.enc.Base64等效的C#实现,解决MD5转Base64不一致问题

差异原因

两端Base64编码的输入对象不同:

  • CryptoJS侧:CryptoJS.MD5()返回的是MD5计算得到的16字节原始二进制数据,直接对这16字节做Base64编码得到结果
  • 当前C#侧:你先把16字节的MD5原始数据转成了32位的十六进制字符串,再对这个32位字符串的UTF8编码字节做Base64编码,输入完全不一样,结果自然不匹配。

正确C#实现

方案1:如果你的CreateMD5方法返回的是十六进制字符串

先把十六进制字符串转回原始MD5字节数组,再做Base64编码:

// 十六进制字符串转字节数组方法
public static byte[] HexStringToByteArray(string hex)
{
    byte[] bytes = new byte[hex.Length / 2];
    for (int i = 0; i < hex.Length; i += 2)
    {
        bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
    }
    return bytes;
}

// 调用逻辑
var md5Hex = CreateMD5("mickeymouse");
var md5Bytes = HexStringToByteArray(md5Hex);
var toB64 = Convert.ToBase64String(md5Bytes);
// 输出结果:mN8bPgED9XqYF9Z1BxUEug== 和JS侧完全一致

方案2:最优实现(推荐)

直接在计算MD5的时候保留原始字节数组,省略转十六进制再转回字节的冗余步骤:

public static string Md5ToBase64(string input)
{
    using (var md5 = System.Security.Cryptography.MD5.Create())
    {
        byte[] inputBytes = System.Text.Encoding.UTF8.GetBytes(input);
        byte[] hashBytes = md5.ComputeHash(inputBytes);
        return Convert.ToBase64String(hashBytes);
    }
}

// 调用
var toB64 = Md5ToBase64("mickeymouse");
// 输出结果:mN8bPgED9XqYF9Z1BxUEug==

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:06:02