请教大家一个问题, 请问为什么我的md5加密结果和别人的不一样。 同样的字符串。 我用。Discuz 和动易 系统 加密结果是一样的。
但是我自己 用net md5 处理 会少一位呢? 如下,同一个字符串, 上面的是所使用 Discuz 和动易 的 加密加过。 下面的是自己加密结果。 第三位少一个0
8904fc90ef2ee650734696b9876cf0aa
894fc90ef2ee650734696b9876cf0aa /// <summary>
/// MD5 32位加密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
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;
}
但是我自己 用net md5 处理 会少一位呢? 如下,同一个字符串, 上面的是所使用 Discuz 和动易 的 加密加过。 下面的是自己加密结果。 第三位少一个0
8904fc90ef2ee650734696b9876cf0aa
894fc90ef2ee650734696b9876cf0aa /// <summary>
/// MD5 32位加密
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
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;
}
{
private static MD5 md5 = MD5.Create();
private MD5Hashing()
{
}
/**//// <summary>
/// 将字符串加密
/// </summary>
/// <param name="sourceString">需要加密的字符串</param>
/// <returns>MD5加密后字符串</returns>
public static string HashString(string sourceString)
{
return HashString("gb2312", sourceString);
}
/**//// <summary>
/// 字符串MD5加密
/// </summary>
/// <param name="codeName">编码类型</param>
/// <param name="sourceString">需要加密的字符串</param>
/// <returns>MD5加密后字符串</returns>
public static string HashString(string codeName, string sourceString)
{
byte[] source = md5.ComputeHash(Encoding.GetEncoding(codeName).GetBytes(sourceString));
StringBuilder sBuilder = new StringBuilder();
for (int i = 0; i < source.Length; i++)
{
sBuilder.Append(source[i].ToString("x"));
}
return sBuilder.ToString();
}
}
我断点看了 这一段。
for (int i = 0; i < source.Length; i++)
{
sBuilder.Append(source[i].ToString("x"));
}
source 共16位。
[0]137
[1]4
[2]252
.....得到的结果。 还是8904fc90ef2ee650734696b9876cf0aa 8904fc90ef2ee650734696b9876cf0aa 对比还是少一个0麻烦你在看看。
[0]137 --> 变成16进制就为 89
[1]4 --> 本来是004的,变成16进制就为4了
[2]252 --> 变成16进制就为 fc
894fc90ef2ee650734696b9876cf0aa
第三位应该是 0 但是现在怎么都没有这个0。应该是这个结果 。
8904fc90ef2ee650734696b9876cf0aa不明白为什么。
{
sBuilder.Append(source[i].ToString("x2"));
}