C#与PHP的md5计算结果不同的解决方法
问题重现
这个API是当时给Lyra应用做激活用的,遂打开Lyra试了下,却发现一切正常,于是可以排除服务端的问题
放出导致错误的源码(来自MSDN):
publicstringCalculateMD5Hash(stringinput)
{
//step1,calculateMD5hashfrominput
MD5md5=System.Security.Cryptography.MD5.Create();
byte[]inputBytes=System.Text.Encoding.ASCII.GetBytes(input);
byte[]hash=md5.ComputeHash(inputBytes);
//step2,convertbytearraytohexstring
StringBuildersb=newStringBuilder();
for(inti=0;i<hash.Length;i++)
{sb.Append(hash[i].ToString(“X2”));
}
returnsb.ToString();
}
实质
MD5有很多版本,其实这段代码并没有错,但是php的md5函数默认返回的是32位小写,而以上这一段返回的是16位小写
于是想办法把这个func改为32位小写输出即可
publicstaticStringmd5(Strings)
{
MD5md5=newMD5CryptoServiceProvider();
byte[]bytes=System.Text.Encoding.UTF8.GetBytes(s);
bytes=md5.ComputeHash(bytes);
md5.Clear();
stringret="";
for(inti=0;i<bytes.Length;i++)
{
ret+=Convert.ToString(bytes[i],16).PadLeft(2,'0');
}
returnret.PadLeft(32,'0');
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。