C# MD5加密以及MD5少位数和MD5不匹配的问题

前言

最近接入了微信支付,发现经常会出现sign签名错误,概率性出现,一直没找到原因。

后面才发现我从网上找来的MD5加密函数会出现少0的问题,从而导致加密出来的md5码可能是31位或者30位的问题

加密方法

/// <summary>
        /// MD5 32位加密
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        static string Md5(string str)
        {
            string cl = str;
            string pwd = "";
            System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();//实例化一个md5对像
            // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
            byte[] s = md5.ComputeHash(Encoding.ASCII.GetBytes(cl));
            // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
            for (int i = 0; i < s.Length; i++)
            {
                // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 
                pwd = pwd + s[i].ToString("X2");

            }
            return pwd;
        }

如上就是我最终的MD5加密方法

FAQ

  1.  MD5少位数是因为s[i]是一个byte,8位,当s[i]中的值为0时,生成的字符串应该是00,而如果ToString("X")会生成0,所以有几个s[i]为0,就少了多少位.把"X"改成"X2"就可以了
  2. MD5码加密和其他地方不一样的问题。是因为获取bytes时的编码问题,注意下编码就可以了。Encoding.ASCII/Encoding.UTF8

 

 

 

 

 

 

 

 

本文链接:

https://www.bobsong.net/1179.html
1 + 2 =
快来做第一个评论的人吧~