//计算指定字符串的MD5哈希值 public static string Hash(string message) { if (string.IsNullOrEmpty(message)) { return(string.Empty); } else { //创建MD5算法的默认实例 MD5 md5 = MD5.Create(); byte[] source = Encoding.Unicode.GetBytes(message); byte[] result = md5.ComputeHash(source); //加密 StringBuilder buffer = new StringBuilder(result.Length); for (int i = 0; i < result.Length; i++) { //将byte值转换成十六进制字符串 buffer.Append(result[i].ToString("x")); } return(buffer.ToString()); } }
public static void MD5Encryption(string password) { //MD5类是抽象类 MD5 md5 = MD5.Create(); //需要将字符串转成字节数组 byte[] buffer = Encoding.Default.GetBytes(password); //加密后是一个字节类型的数组,这里要注意编码UTF8/Unicode等的选择 byte[] md5buffer = md5.ComputeHash(buffer); string str = null; // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 foreach (byte b in md5buffer) { //得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 //但是在和对方测试过程中,发现我这边的MD5加密编码,经常出现少一位或几位的问题; //后来分析发现是 字符串格式符的问题, X 表示大写, x 表示小写, //X2和x2表示不省略首位为0的十六进制数字; str += b.ToString("x2"); } Console.WriteLine(str);//202cb962ac59075b964b07152d234b70 Console.ReadKey(); }
/// <summary> /// md5加密方式 /// </summary> /// <param name="str">原字符串</param> /// <returns>加密后的字符串</returns> public static string MD5(string str) { using MD5 md5 = System.Security.Cryptography.MD5.Create(); str = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(str))).Replace("-", null); return(str); }
public static String ComputeHashString(this MD5 md5, Byte[] buffer) { return(MD5Ex.HashDataToString(md5.ComputeHash(buffer))); }
public static String ComputeHashString(this MD5 md5, Stream inputStream) { return(MD5Ex.HashDataToString(md5.ComputeHash(inputStream))); }
public static String ComputeHashString(this MD5 md5, Byte[] buffer, Int32 offset, Int32 count) { return(MD5Ex.HashDataToString(md5.ComputeHash(buffer, offset, count))); }