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'); }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。