第一次寫博客 不知道怎么說什么
我們就來聊聊 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還是挺好的