MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法),在90年代初由Mit Laboratory for Computer Science和Rsa data security inc的Ronald l. rivest開發出來,經md二、md3和md4發展而來。它的做用是讓大容量信息在用數字簽名軟件簽署私人密匙前被"壓縮"成一種保密的格式(就是把一個任意長度的字節串變換成必定長的大整數)。無論是md二、md4仍是md5,它們都須要得到一個隨機長度的信息併產生一個128位的信息摘要。html
加密哈希函數將任意長度的二進制字符串映射爲固定長度的小型二進制字符串。加密哈希函數有這樣一個屬性:在計算上不大可能找到散列爲相同的值的兩個不一樣的輸入;也就是說,兩組數據的哈希值僅在對應的數據也匹配時纔會匹配。數據的少許更改會在哈希值中產生不可預知的大量更改。因此你很難從加密後的文字中找到蛛絲馬跡。web
SHA1的全稱是Secure Hash Algorithm(安全哈希算法)算法
MD5 算法的哈希值大小爲128位。而SHA1 算法的哈希值大小爲160位。兩種算法都是不可逆。數據庫
雖然說2004年8月17日的美國加州聖巴巴拉的國際密碼學會議(Crypto’2004)上,來自中國山東大學的王小云教授作了破譯MD五、HAVAL-12八、 MD4和RIPEMD算法的報告,公佈了MD系列算法的破解結果。宣告了固若金湯的世界通行密碼標準MD5的堡壘轟然倒塌,引起了密碼學界的軒然大波。可是我以爲對於咱們作普通的軟件來講,這個加密安全程度已經足夠使用了。數組
咱們日常用的最多的無非就是加密用戶密碼,把加密好的密碼存儲到數據庫中,進行密碼比較的時候,把用戶輸入的密碼再進行加密,而後與數據庫中的密文進行比較。至於ASP.net類中是如何實現加密算法的,這個咱們不須要關心,會用就好了。安全
下面就是ASP.NET中幾種加密方法。加密算法有兩種,也就是上面提到的MD5和SHA1,這裏我舉的例子是以MD5爲例,SHA1大體相同,只是使用的類不同。服務器
MD5 相關類:ide
System.Security.Cryptography.MD5 System.Security.Cryptography.MD5CryptoServiceProvider() System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "MD5") |
SHA1相關類:函數
System.Security.Cryptography.SHA1 System.Security.Cryptography.SHA1CryptoServiceProvider() System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "SHA1") |
方法以下:(用的vs2005)學習
1/**//// <summary> 2 /// 方法一:經過使用 new 運算符建立對象 3 /// </summary> 4 /// <param name="strSource">須要加密的明文</param> 5 /// <returns>返回16位加密結果,該結果取32位加密結果的第9位到25位</returns> 6 public string Get_MD5_Method1(string strSource) 7 { 8 //new 9 System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider(); 10 11 //獲取密文字節數組 12 byte[] bytResult = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(strSource)); 13 14 //轉換成字符串,並取9到25位 15 string strResult = BitConverter.ToString(bytResult, 4, 8); 16 //轉換成字符串,32位 17 //string strResult = BitConverter.ToString(bytResult); 18 19 //BitConverter轉換出來的字符串會在每一個字符中間產生一個分隔符,須要去除掉 20 strResult = strResult.Replace("-", ""); 21 return strResult; 22 } 23 24 /**//// <summary> 25 /// 方法二:經過調用特定加密算法的抽象類上的 Create 方法,建立實現特定加密算法的對象。 26 /// </summary> 27 /// <param name="strSource">須要加密的明文</param> 28 /// <returns>返回32位加密結果</returns> 29 public string Get_MD5_Method2(string strSource) 30 { 31 string strResult = ""; 32 33 //Create 34 System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create(); 35 36 //注意編碼UTF八、UTF七、Unicode等的選擇 37 byte[] bytResult = md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(strSource)); 38 39 //字節類型的數組轉換爲字符串 40 for (int i = 0; i < bytResult.Length; i++) 41 { 42 //16進制轉換 43 strResult = strResult + bytResult[i].ToString("X"); 44 } 45 return strResult; 46 } 47 48 /**//// <summary> 49 /// 方法三:直接使用HashPasswordForStoringInConfigFile生成 50 /// </summary> 51 /// <param name="strSource">須要加密的明文</param> 52 /// <returns>返回32位加密結果</returns> 53 public string Get_MD5_Method3(string strSource) 54 { 55 return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strSource, "MD5"); 56 } |
這些加密函數都是在服務器端執行,也就是說,當用戶輸入密碼後,從客戶端到服務器端傳輸時,用戶的密碼沒有任何保護,很危險。銀行的作法是在客戶端安裝ActiveX控件,在客戶端就把一些重要信息進行加密,再發送。這個偶就不會拉,很但願能學習學習作這種ActiveX控件。
原文地址:http://www.ratuo.com/websitezt/net/20652.html