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

C#实现MD5(session + MD5(用户名+密码))嵌套哈希结果不匹配问题

问题原因

你的代码核心错误是对哈希规则的处理逻辑理解偏差:公式里的MD5(username+password)指的是将用户名+密码的MD5计算结果转为十六进制字符串后的值,而非MD5输出的原始二进制字节。你当前直接将第一次MD5的原始字节拼接到session字节后计算,和规则要求的拼接逻辑完全不符,所以结果错误。

修复后的代码

using System;
using System.Security.Cryptography;
using System.Text;

string EncryptPassword(string UserName, string Password, string SessionId)
{
    using (MD5 md5 = MD5.Create())
    {
        // 第一步:计算用户名+密码的MD5,转为十六进制字符串
        string credentials = $"{UserName}{Password}";
        byte[] credentialBytes = Encoding.UTF8.GetBytes(credentials);
        byte[] firstHashBytes = md5.ComputeHash(credentialBytes);
        StringBuilder firstHashSb = new StringBuilder();
        for (int i = 0; i < firstHashBytes.Length; i++)
        {
            firstHashSb.Append(firstHashBytes[i].ToString("x2"));
        }
        string firstHashHex = firstHashSb.ToString();

        // 第二步:拼接session和第一步得到的十六进制字符串,再计算MD5
        string combined = SessionId + firstHashHex;
        byte[] combinedBytes = Encoding.UTF8.GetBytes(combined);
        byte[] finalHashBytes = md5.ComputeHash(combinedBytes);

        // 转为十六进制字符串返回
        StringBuilder finalSb = new StringBuilder();
        for (int i = 0; i < finalHashBytes.Length; i++)
        {
            finalSb.Append(finalHashBytes[i].ToString("x2"));
        }
        return finalSb.ToString();
    }
}

验证结果

使用你提供的测试参数:

  • 用户名:TestUser
  • 密码:TestPassword
  • Session:uu2cO7b7drhxHKItfRpcJ4#qk@230#$R
    运行上述代码得到的结果为4dfb147da0d2338cb57e05d1b4b21d07,和预期的正确结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:57:03