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
相关产品推荐
相关产品推荐

