我使用的以下代码 ,加密的原串全为 字母或者数字 含有&符号 ,为什么出来的结果是31位的,求32位的代码 
   static string UserMd5(string str)
    {
        string cl = str;
        string pwd = "";
        MD5 md5 = MD5.Create();//实例化一个md5对像
        // 加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 
        byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(cl));
        // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得
        for (int i = 0; i < s.Length; i++)
        {
            // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符             pwd = pwd + s[i].ToString("X");        }
        return pwd;
    }

解决方案 »

  1.   

    你的for循环写错了,应该是i<s.Length+1
      

  2.   

    pwd = pwd + s[i].ToString("X");  s[i]=1  =>  "1"
    需要2位右对齐 s[i]=1  =>  "01"
      

  3.   

    pwd = pwd + s[i].ToString("X"); 
    --------------------------
    pwd = pwd + s[i].ToString("x"); 
    不知道大小写有区分不。
      

  4.   

        public static string MD5(string password)
        {
            byte[] b = System.Text.Encoding.Default.GetBytes(password);
            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;
        }