C# 计算32位小写md5hash值算法如下:
public static string GetStrMd5_32X(string ConvertString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)));
t2 = t2.Replace("-", "");
return t2.ToLower();
}
当处理数字字母英文字符时,与php中函数md5计算一致,当处理汉字时,计算结果不同
例如计算“你好”
C#
b94ae3c6d892b29cf48d9bea819b27b9
php
7eca689f0d3389d9dea66ae112e5cfd7
经排查原因,发现md5本质是计算二进制流,算法是一致,造成不同的原因是因为C#默认采用UNICODE编码转换,php采用UTF-8编码,需要将C#中
UTF8Encoding.Default.GetBytes(ConvertString)
修改为
UTF8Encoding.UTF8.GetBytes(ConvertString)