public static string MD5Encrypt(string str)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] bstr = System.Text.Encoding.UTF8.GetBytes(str);
byte[] reb;
reb=md5.ComputeHash(bstr);
string restr="";
Console.WriteLine(reb.Length);
for(int i=0;i<reb.Length;i++)
{
restr+=reb[i].ToString("X");
}
return restr;
}md5加密以后出来的结果不是应该是32么?为什么我这儿出来的结果是31位的呢?

解决方案 »

  1.   

    System.Text.Encoding.ASCII.GetBytes(str);
    改成这样试试
      

  2.   

    to:bitpolar(独自看天)
    使用ascii编码得到的只有30位,而且ascii编码以后得到的结果和utf8还不一样。
      

  3.   

    ascii得到的结果和utf8是不一样
    用MD5的C#源码加密和用C#带的MD5算法加密
    我测试的结果用Ascii 和这份源码生成的结果是一样的
      

  4.   

    public string ArrayToHexString(byte[] array, bool uppercase)
            {
                string hexString = "";
                string format = "x2";
                if (uppercase)
                {
                    format = "X2";
                }
                foreach (byte b in array)
                {
                    hexString += b.ToString(format);
                }
                return hexString;
            }        MD5 MD5Provider = new MD5CryptoServiceProvider();
            private void btnMD5_Click(object sender, EventArgs e)
            {
                this.txtUtilityInfo.Text = ArrayToHexString(MD5Provider.ComputeHash(Encoding.ASCII.GetBytes(this.txtStringInfo.Text)), false);
            }
      

  5.   

    按照你的代码 reb里面应该是128位的16进制数据
    不知道你转成字符串的时候会不会有问题
    标准的format 是X2 或者x2 ,你的是X