C# MD5 32大写位加密 UTF-8编码

        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;
        }

最开始我使用上面的进行加密,后来只要出现中文我就发现常常性的会少一位数或者少几位数,通过检查发现Encoding.Default使用的是默认的编码:gb2312数组

因此改变加密方式:编码

   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("X2");
            }
            return pwd;
        }

X表明取消最开始的0  X2表明不省略开始的0    加密

eg: 0D12   ==X==》D12spa

         0D12   ==X2==》0D12code

相关文章
相关标签/搜索