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位的呢?
{
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位的呢?
改成这样试试
使用ascii编码得到的只有30位,而且ascii编码以后得到的结果和utf8还不一样。
用MD5的C#源码加密和用C#带的MD5算法加密
我测试的结果用Ascii 和这份源码生成的结果是一样的
{
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);
}
不知道你转成字符串的时候会不会有问题
标准的format 是X2 或者x2 ,你的是X