昨天遇到如下情况: 在对订单的回调数据进行处理时报验签失败 我看了一下记录 都没什么问题 这时我注意到待加密字符串中有汉字 我就感觉是因为这个 用网上的MD5加密工具试了一下 非常好用的在线工具(http://tool.chinaz.com/Tools/md5.aspx) 发现加密结果和上游传回来的结果一样 确实是我们的算法和上游的不一致导致的 这篇文章解决了这个问题 https://www.jb51.net/article/19196.htm
//我方加密算法:
public string GetMD5(string str)
{
byte[] b = System.Text.Encoding.Default.GetBytes(str);
b = new System.Security.Cryptography.MD5CryptoServiceProvider().ComputeHash(b);
string ret = "";
for (int i = 0; i < b.Length; i++)
{
ret += b[i].ToString("x").PadLeft(2, '0');
}
return ret;
}
//上游算法:
public string GetMD5(string str, string charset)
{
MD5CryptoServiceProvider MD5 = new MD5CryptoServiceProvider();
string result=
BitConverter.ToString(MD5.ComputeHash(Encoding.GetEncoding(charset).GetBytes(text))).Replace("-", "");
return result;
}
在MD5中 若待加密字符串都是英文 使用哪种编码格式和算法结果都是一样的 若有中文或者其它语言文字就要特别注意编码格式和所用的算法