第一次写博客 不知道怎么说什么
我们就来聊聊 MD5加密码
由来
MD5的全称是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由MIT Laboratory for Computer Science和RSA Data Security Inc的Ronald L. Rivest 开发出来,经MD2、MD3和MD4发展而来。
作用
是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的大整数)。不管是MD2、MD4还是MD5,它们都需要获得一个随机长度的信息并产生一个128位的信息摘要。虽然这些算法的结构或多或少有些相似,但MD2的设计与MD4和MD5完全不同,那是因为MD2是为8位机器做过设计优化的,而MD4和MD5却是面向32位的电脑。这三个算法的描述和C语言源代码在Internet RFCs 1321中有详细的描述,这是一份最权威的文档,由Ronald L. Rivest在1992年8月向IETF提交。(说了这么多 其实我也不知道他说的什么) 简单来讲MD5 就是将用户的密码进行加密用来保护用户的安全 (MD5是不可逆解密 除非暴力强解)
介绍了这么久 我们开始进入正题咯
1 static void Main(string[] args) 2 { 3 4 //调用MD5Str 得到加密后字符串 202CB962AC59075B964B07152D234B70 5 Console.WriteLine(MD5Str("123")); 6 7 } 8 /// <summary> 9 /// 这是最基础的MD5 加密 10 /// </summary> 11 /// <param name="password"></param> 12 /// <returns></returns> 13 public static string MD5Str(string password) 14 { 15 return BitConverter.ToString(MD5.Create().ComputeHash(Encoding.Default.GetBytes(password))).Replace("-", ""); 16 17 18 }
一般的程序员认为 这样就可以 其实还是有问题的 因为别人可以通过一些网站暴力破解 (http://www.cmd5.com/)这样还是无法保证用户的密码安全,并没有什么用 ,接下来就开始变异啦
1 static void Main(string[] args) 2 { 3 4 //调用MD5Str 得到加密后字符串 202CB962AC59075B964B07152D234B70 5 Console.WriteLine(MD5Str("123")); 6 //调用MD5Str2 变异后 得到加密后字符串 20-2C-B9-62-AC-59-07-5B-96-4B-07-15-2D-23-4B-70 7 Console.WriteLine(MD5Str2("123")); 8 9 } 10 /// <summary> 11 /// 这是最基础的MD5 加密 12 /// </summary> 13 /// <param name="password"></param> 14 /// <returns></returns> 15 public static string MD5Str(string password) 16 { 17 return BitConverter.ToString(MD5.Create().ComputeHash(Encoding.Default.GetBytes(password))).Replace("-", ""); 18 19 20 } 21 /// <summary> 22 /// 简单的变异MD5 23 /// </summary> 24 /// <param name="password"></param> 25 /// <returns></returns> 26 public static string MD5Str2(string password) 27 { 28 return BitConverter.ToString(MD5.Create().ComputeHash(Encoding.Default.GetBytes(password))).Replace("X", ""); 29 30 31 }
就算是他暴力破解也要一定的时间 和 金钱
还有第三种 你可以在里面自行加密码
1 // 在这里想怎么玩就这么玩 2 public static string MD5Str3(string password) { 3 4 5 MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider(); 6 byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(password)); 7 StringBuilder sBuilder = new StringBuilder(); 8 for (int i = 0; i < data.Length; i++) 9 { 10 sBuilder.Append(data[i].ToString("x2")+"1"); 11 } 12 return sBuilder.ToString(); 13 14 15 }
总的来说 MD5还是挺好的