请教大家一个问题, 请问为什么我的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;
        }

解决方案 »

  1.   

    public sealed class MD5Hashing
        {
            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();
            }
        }
      

  2.   

    还是少一个零。   第三位。
    我断点看了 这一段。
                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麻烦你在看看。
      

  3.   


    [0]137  --> 变成16进制就为 89
    [1]4    --> 本来是004的,变成16进制就为4了
    [2]252  --> 变成16进制就为 fc
      

  4.   

    但是我现在 得到的结果   
    894fc90ef2ee650734696b9876cf0aa  
    第三位应该是 0  但是现在怎么都没有这个0。应该是这个结果 。
    8904fc90ef2ee650734696b9876cf0aa不明白为什么。
      

  5.   

    for (int i = 0; i < source.Length; i++)
    {
         sBuilder.Append(source[i].ToString("x2"));