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