.NET 5中MD5哈希生成结果与在线工具不一致的问题
MD5哈希结果不一致的原因分析
问题场景
用户提供的C#代码如下:
private static string ComputeMD5Hash(string input) { using (MD5 md5 = MD5.Create()) { byte[] inputBytes = Encoding.Default.GetBytes(input); byte[] hashBytes = md5.ComputeHash(inputBytes); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hashBytes.Length; i++) { sb.Append(hashBytes[i].ToString("x2")); } return sb.ToString(); } }
在.NET 5环境运行后得到的MD5哈希值为91c8798099fac8762bb0e014084a3f08,但在线MD5工具计算出的结果却是8bb25958e7b1caad4a3be362d6098d76,需要排查差异原因。
核心原因分析
- 编码不匹配是首要因素:代码中使用
Encoding.Default将字符串转字节数组,该编码是系统依赖的ANSI编码,会随操作系统区域设置变化(比如中文系统多为GBK,英文系统为ISO-8859-1)。而绝大多数在线MD5工具默认采用UTF-8编码处理字符串,字节序列的差异直接导致哈希结果不同。 - 输入内容隐性差异:如果本地测试的输入字符串和在线工具输入的内容存在细微差别(比如包含不可见的换行符、全角/半角空格差异),也会导致哈希结果不一致。
- 排除大小写因素:代码用
"x2"生成小写哈希,在线结果同样为小写,因此大小写不是本次问题的诱因。
修复方案
将代码中的编码替换为UTF-8,与在线工具的默认编码对齐:
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
修改后,只要输入内容完全一致,本地计算结果就会和在线工具匹配。
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

