[摘 要] 本文介紹MD5加密算法的基本原理,舉例說明該算法在用ASP和ASP.NET開發(fā)WEB應用程序時安全保護數(shù)據(jù)庫中用戶密碼這一重要數(shù)據(jù)的方法。
[關鍵詞] MD5 加密 密文
一、引言
隨著高校數(shù)學化校園的建設,學校及校內各部門都建立了自己的網站和管理系統(tǒng)。信息數(shù)據(jù)的安全越來越受到人們的關注。在學校信息管理系統(tǒng)中,經常需要將用戶權限信息存儲于數(shù)據(jù)庫,當不同的用戶登錄時,根據(jù)數(shù)據(jù)庫中的信息進行相關驗證,但數(shù)據(jù)庫中的信息也受到各方面因素的影響而使安全性受到威脅,因此如何保證數(shù)據(jù)庫的安全變得越來越重要。為了增強安全性,我們有必要對數(shù)據(jù)庫中的重要資料進行加密,這樣既使攻擊者得到了加密的用戶信息,如果沒有解密算法,也一樣不能獲得用戶的真實信息?,F(xiàn)在網站一般采用MD5加密算法對用戶的重要信息進行加密。
二、加密方式分類
從大的方面來說,有兩類加密方式,即:單向加密和雙向加密。雙向加密是加密算法中最常用的,它將能直接理解的明文加密為不能理解的密文數(shù)據(jù)。然后在需要時,可能使用一定的解密算法將加密以后的密文再解密為原來可以理解的明文。雙向加密一般適合于隱秘通訊。而單向加密只能對數(shù)據(jù)進行加密,不能將密文解密。單向加密在實際中的一個應用就是數(shù)據(jù)庫中的用戶信息加密,當用戶創(chuàng)建一個新的賬號或者密碼,這些信息不是直接保存在數(shù)據(jù)庫中,而是經過加密以后再保存。這樣,既使這些信息被泄露,也不能理解這些信息的真正含義,因為他得到的是一段不能解密的密文。
三、MD5算法簡述
MD5加密算法,把任意長度的信息通過加密產生128位信息摘要(或信息指紋),這種加密算法對不同的信息不可能產生同一信息摘要,同時對于給定的信息摘要推斷出其相應的信息也是不可能的。MD5屬于單向加密的加密算法。MD5加密算法在數(shù)字簽名、身份認證等方面得到了廣泛的應用。
MD5以512位分組來處理輸入的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理后,算法的輸出由四個32位分組組成,將這四個32位分組級聯(lián)后將生成一個128位散列值。在MD5算法中,首先需要對信息進行填充,使其字節(jié)長度對512求余的結果等于448。因此,信息的字節(jié)長度將被擴展至n*512+448,即n*64+56個字節(jié),n為一個正整數(shù)。具體補位操作是補一個1,然后補0到滿足上述要求。然后,再在這個結果后面附加一個以64位二進制表示的填充前信息長度。經過這兩步的處理,現(xiàn)在的信息字節(jié)長度n*512+448+64=(n+1)*512,即長度恰好是512的整數(shù)倍。這樣做的原因是為滿足以上處理中對信息長度的要求。
MD5是一種采用單向加密的不可逆加密算法,MD5算法的應用主要是針對用戶的注冊登錄,用戶在注冊時所提交的信息(密碼)是利用MD5算法加密之后再保存到數(shù)據(jù)庫中,這樣可以防止用戶密碼的泄露,既使是黑客非法獲得加密密文也沒有辦法查看到用戶的密碼,有效地保護了系統(tǒng)的安全。在用戶進行登錄時,為了身份驗證,必須對輸入的密碼重新進行MD5加密,然后再與數(shù)據(jù)庫中的信息進行比對,相同便可進入系統(tǒng)。
四、ASP中MD5加密算法的實現(xiàn)
在ASP程序設計中實現(xiàn)MD5加密是很簡單的,首先需要下載一個MD5.ASP源文件,網上有很多。把MD5.ASP源文件放在網站目錄,在需要加密的頁面最上面引入,這樣就可以在頁面中使用MD5這個函數(shù)進行加MD5加密算法。
比如用戶注冊頁面提交了表單,加密頁面要把它存入數(shù)據(jù)庫, 不加密的時候直接使用password=Request(“password”),然后把變量password利用SQL語句存入數(shù)據(jù)庫。如果利用MD5加密,只需要在這一句后面加上password=md5(Request(“password”)),我們可以把經過加密的數(shù)據(jù)放入password這個變量中,再把它利用SQL語句存入數(shù)據(jù)庫。比如123經過MD5加密后會變成ac59075b964b0715,由于MD5是單向加密算法,沒有誰能夠算出它是123經過MD5加密來的。當合法用戶通過登錄頁面輸入123,程序再進行MD5加密,把加密后的數(shù)字ac59075b964b0715跟數(shù)據(jù)庫中保存的進行比較,這顯然是相等的,所以就通過驗證,如果用戶忘記了密碼是123,那誰也無法由ac59075b964b0715得出這個密碼。
五、NET中MD5加密算法的實現(xiàn)
系統(tǒng)只需在用戶注冊或密碼修改時將密碼用Hash Password For StoringIn ConfigFile方法進行加密,而在用戶登錄時用同樣的方法將用戶輸人的密碼進行加密后再比較,相同則登錄成功,不同則失敗。其實現(xiàn)略寫如下:
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();
}}
六、結束語
互聯(lián)網在我國越來越普及,其安全問題越來越突出,網絡的安全只是相對而言,真是道高一尺,魔高一丈,網絡沒有絕對安全。此種基于WEB密碼傳輸只是網絡安全措施之一,對于互聯(lián)網的安全,還有很多工作要做,如怎樣防止字典攻擊、窮舉攻擊、窺探攻擊、垃圾搜索攻擊等等,網絡安全工作任重而道遠。
參考文獻
[1]劉洪濤:MD5加密算法在Web 程序中的應用.科技咨詢導報, 2006.8
[2]梁田貴:算法設計與分析[M].冶金工業(yè)出版社,2004
[3]Chris Payne著:趙斌等譯.ASP.NET從入門到精通[M].人民郵電出版社,2002