str.ToString("X2"):
X为十六进制,
2为每次都是两位数
第一次用的s[i].ToString("X"),出错找了下是少了1位,03只输出了3,改为s[i].ToString("X2");
1 /// <summary> 2 /// 字符串转MD5 3 /// </summary> 4 /// <param name="str">需要加密的字符串</param> 5 /// <param name="md5_16">需不需要返回16位,默认32位</param> 6 /// <param name="capital">需不需要返回大写,默认小写</param> 7 /// <returns></returns> 8 public static string StringToMD5(string str = "", bool md5_16=false, bool capital = false) 9 { 10 string pwd = ""; 11 MD5 md5 = MD5.Create(); //实例化一个md5对象 12 byte[] s = md5.ComputeHash(UTF8Encoding.UTF8.GetBytes(str)); 13 14 // 大写 15 if (capital) 16 { 17 for (int i = 0; i < s.Length; i++) 18 { 19 // --X为十六进制,2为每次都是两位数 20 pwd = pwd + s[i].ToString("X2"); // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母 21 } 22 } 23 else 24 { 25 for (int i = 0; i < s.Length; i++) // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 26 { 27 pwd = pwd + s[i].ToString("X2").ToLower(); 28 } 29 } 30 31 // 16位 32 if (md5_16) 33 { 34 pwd = pwd.Substring(4, 16); 35 } 36 return pwd; 37 }