1. 程式人生 > >c# 實現MD5,SHA1,SHA256,SHA512等常用加密演算法

c# 實現MD5,SHA1,SHA256,SHA512等常用加密演算法

在很多電子商務和社群應用中,我們都要存放很多的客戶的資料,其中包括了很多的隱私資訊和客戶不願被別人看到的資訊,當然好有客戶執行各種操作的密碼,此時就需要對客戶的資訊進行加密再儲存,目前有兩種比較好的加密演算法:MD5和sha1。

這兩種加密演算法都屬於雜湊加密技術。所謂雜湊加密就是無論輸入的字串是什麼,有多大,加密後都將變成唯一的定長的加密串。

首先介紹一下MD5,MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的電腦科學實驗室和RSA Data Security Inc發明,經MD2、MD3和MD4發展而來。Message-Digest泛指位元組串(Message)的Hash變換,就是把一個任意長度的位元組串變換成一定長的大整數。請注意是“位元組串”而不是“字串”,是因為這種變換隻與位元組的值有關,與字符集或編碼方式無關。MD5將任意長度的“位元組串”變換成一個128bit的大整數,並且這是一個不可逆的變換過程,要破解只能窮舉,難度很大,理論上8位的密碼組合有(26字母+10數字+21常用英文符號)的8次方種可能,以現在比較好的機器機器要算上一年多。MD5加密後的密串長度有16位和32位兩種。不過最近MD5聽說被破解了(聽說還是被我們的國人破掉的,佩服啊!),能很快碰撞到密碼,不過破解機還沒有流傳出來。

MD5的典型應用是對一段Message(位元組串)產生fingerprint(指紋),以防止被“篡改”。舉個例子,你將一段話寫在一個叫readme.txt檔案中,並對這個readme.txt產生一個MD5的值並記錄在案,然後你可以傳播這個檔案給別人,別人如果修改了檔案中的任何內容,你對這個檔案重新計算MD5時就會發現。如果再有一個第三方的認證機構,用MD5還可以防止檔案作者的“抵賴”,這就是所謂的數字簽名應用。

在Microsoft Visual Studio 2005對MD5加密演算法有了很好的支援,使用起來非常簡單,下面是在C#中使用MD5加密字串的例子:

public string md5(string str,int code)
{
    if(code==16) //16位MD5加密(取32位加密的9~25字元)
    {
        return System.Web.Security.FormsAuthentication.

               HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ;
    }
    else//32位加密
    {
        return System.Web.Security.FormsAuthentication.

               HashPasswordForStoringInConfigFile(str,"MD5").ToLower();
    }
}

使用sha1演算法加密後的密串長度有40位,相對更安全一些。

在Microsoft Visual Studio 2005對sha1的使用也很簡單,下面是在C#中使用sha1加密字串的例子:

public string sha1(string str)
{        
    return System.Web.Security.FormsAuthentication.

           HashPasswordForStoringInConfigFile(str, "sha1").ToLower();        
}

不過最後還有一個不幸的訊息,就是sha1演算法已經被破解,國家標準和科技學院(National Institute of Standards and Technology)已經推薦使用sha-256或者sha-512演算法。