用MD5加密算法來(lái)實(shí)現(xiàn)B/S通信系統(tǒng)加密
隨著互聯(lián)網(wǎng)的快速興起和廣泛應(yīng)用,基于瀏覽器(Browser)和服務(wù)器(Server)之間的信息傳輸越來(lái)越頻繁,以Web方式對(duì)數(shù)據(jù)進(jìn)行操作的安全問(wèn)題日益突出。為此,我們提出了一種基于改進(jìn)的MD5加密算法加密的傳輸方式,實(shí)現(xiàn)B/S通信的傳輸安全。
一、MD5加密算法原理
MD5的全稱是MessageDigest5,是Hash算法中的一種重要加密算法,具有單向加密、加密結(jié)果唯一、安全性能好等特點(diǎn)。MD5加密算法以512位分組來(lái)處理輸入的信息,且每一分組又被劃分為16個(gè)32位子分組,經(jīng)過(guò)了一系列的處理后,加密算法的輸出由四個(gè)32位分組組成,將這四個(gè)32位分組級(jí)聯(lián)后將生成一個(gè)128位散列值。
MD5加密算法的流程如圖1所示。

(1)信息填充
首先需要對(duì)明文信息進(jìn)行填充,使其位長(zhǎng)度對(duì)512求余的結(jié)果等于448。因此,信息的位長(zhǎng)度(BitsLength)將被擴(kuò)展至N*512+448。然后,再在這個(gè)結(jié)果后面附加一個(gè)以64位二進(jìn)制表示的填充前信息長(zhǎng)度。經(jīng)過(guò)這兩步的處理,現(xiàn)在的信息字節(jié)長(zhǎng)度為N*512+448+64=(N+1)*512,即長(zhǎng)度恰好是512的整數(shù)倍。
(2)結(jié)構(gòu)初始化
在處理過(guò)程中需要定義一個(gè)結(jié)構(gòu)。該結(jié)構(gòu)包含了每一次需要處理的一個(gè)明文塊(512bit)和計(jì)算出來(lái)的散列值(128bit)。在散列的整個(gè)過(guò)程中,它的作用非常重要,各個(gè)明文塊計(jì)算出來(lái)的散列值都是通過(guò)它來(lái)傳遞的。
(3)分組文件
將填充好的文件進(jìn)行分組,每組512位,共有N組。
(4)處理分組
使用MD5加密算法處理每組數(shù)據(jù)。
MD5加密算法在計(jì)算時(shí)會(huì)用到四個(gè)32位被稱作鏈接變量(ChainingVariable)的整數(shù)參數(shù),在使用之前要對(duì)它們賦初值,分別就為:
A=0x01234567,B=0x89abcde,fC=0xfedcba98,D=0x76543210。
當(dāng)設(shè)置好這四個(gè)鏈接變量后,就開始進(jìn)入算法的四輪循環(huán)運(yùn)算。循環(huán)的次數(shù)是信息中512位信息分組的數(shù)目。
將上面四個(gè)鏈接變量復(fù)制到另外四個(gè)變量中:A到a,B到b,C到c,D到d。
主循環(huán)有四輪,每輪循環(huán)都很相似。第一輪進(jìn)行16次操作。每次操作對(duì)a、b、c和d中的其中三個(gè)作一次非線性函數(shù)運(yùn)算,然后將所得結(jié)果加上第四個(gè)變量,一個(gè)子分組和一個(gè)常數(shù)。再將所得結(jié)果向右環(huán)移一個(gè)不定的數(shù),并加上a、b、c或d中之一,最后用該結(jié)果取代a、b、c或d中之一。
(5)輸出結(jié)果
當(dāng)全部信息處理完成后,將分組處理的結(jié)果進(jìn)行處理,輸出計(jì)算結(jié)果
所有這些完成之后,將A、B、C、D分別加上a、b、c、d。然后用下一分組數(shù)據(jù)繼續(xù)運(yùn)行算法,最后的輸出是A、B、C和D的級(jí)聯(lián)。當(dāng)全部分組處理完成后,將結(jié)果級(jí)聯(lián),即得到了MD5處理的結(jié)果。
二、基于MD5加密算法的B/S通信系統(tǒng)的實(shí)現(xiàn)
在微軟公司的Microsoft.NET開發(fā)系統(tǒng)中,Microsoft.NETSDK提供了System.Security.Cryptogra
phy命名空間,其中包含MD5CyptoServiceProvider類,在該類中提供專門用于MD5單向數(shù)據(jù)文件加密的解決方法,我們即是使用此方法類來(lái)實(shí)現(xiàn)MD5加密。通過(guò)使用類中的方法ComputeHash,可直接應(yīng)用MD5加密算法,經(jīng)過(guò)編程可以自定義加密函數(shù)來(lái)實(shí)現(xiàn)MD5的加密算法。
在B/S通信系統(tǒng)中,可以對(duì)信息文件進(jìn)行如下加密方式如圖2所示。

基于MD5加密算法的B/S通信方案的具體實(shí)現(xiàn):
(1)首先,用戶在注冊(cè)時(shí),將用戶名利用MD5算法加密,得到加密后的用戶名。然后再把用戶名和密碼串接,將串接后的值進(jìn)行MD5加密,得到加密后的口令文件。將加密后的用戶名和口令文件存儲(chǔ)在服務(wù)器端的數(shù)據(jù)庫(kù)中。
(2)客戶通過(guò)瀏覽器進(jìn)行數(shù)據(jù)請(qǐng)求時(shí),首先在瀏覽器端通過(guò)程序先將用戶名利用MD5算法加密,得到加密后的用戶名。然后再把用戶名和密碼串接,將串接后的值進(jìn)行MD5加密,得到加密后的口令文件。將加密后得到的用戶名和口令文件及服務(wù)器端生成的隨機(jī)驗(yàn)證碼數(shù)據(jù)發(fā)送到服務(wù)器端。
(3)用戶提交表單,服務(wù)器端進(jìn)行驗(yàn)證,具體的流程如圖3所示。

如果客戶端傳來(lái)的數(shù)據(jù)包中和服務(wù)器(Server)端存儲(chǔ)的經(jīng)加密后的口令相同,并且隨機(jī)數(shù)的值也對(duì)應(yīng)相等,則服務(wù)器后向客戶端指定,可以讓客戶端重新定向到下一步的數(shù)據(jù)傳輸。如果對(duì)應(yīng)不能完成認(rèn)證,剛提示用戶重新輸入相關(guān)信息。這樣,就完成了對(duì)用戶的身份認(rèn)證過(guò)程。
實(shí)際應(yīng)用中,我們可以通過(guò)調(diào)用函數(shù),在客戶端對(duì)用戶名和用戶密碼進(jìn)行加密,將得到的加密值傳送到服務(wù)器端,和服務(wù)器上存儲(chǔ)的加密后的值進(jìn)行對(duì)比,得到服務(wù)器端返回結(jié)果,從而實(shí)現(xiàn)對(duì)信息傳輸過(guò)程中的保密。
三、基于MD5加密算法的B/S通信系統(tǒng)的系統(tǒng)安全性分析
MD5加密算法是一種Hash算法,Hash算法的特點(diǎn)就是單方向性,比如可以把一個(gè)文件轉(zhuǎn)成一串字符,但反向卻不可能。
當(dāng)前,針對(duì)MD5加密方法的破解存在一種窮舉方式,其實(shí)是把常用的密碼經(jīng)MD5處理后的數(shù)據(jù)存儲(chǔ)起來(lái)然后再與要破譯的MD5密碼結(jié)果相匹配就有可能得到明文。這種方法的確對(duì)于一些簡(jiǎn)單的密碼存在破解的可能,但這種危險(xiǎn)是可以通過(guò)合適的技術(shù)手段給予降低。
針對(duì)這種破解方法有兩種常用安全對(duì)策,一種是加強(qiáng)密碼的本身的設(shè)置,密碼的長(zhǎng)度要至少8個(gè)字符以上,同時(shí)不要用單純的字母和數(shù)字,最好是字母與數(shù)字加符號(hào)的隨機(jī)組合,并定時(shí)更換,減少被字典表數(shù)據(jù)匹配的機(jī)會(huì)。第二種方法是,對(duì)生成的MD5密碼進(jìn)行再加密,這樣生成密碼就不可能在字典表中找到。
采取的方法是先將用戶名和密碼串接后,再將用戶名也加密。進(jìn)一步提高了密碼的安全性。基于MD5加密算法的B/S通信系統(tǒng)通過(guò)相關(guān)的對(duì)比,達(dá)到了安全保密的目的。
MD5加密算法是一種非常易用和安全的加密措施,適當(dāng)應(yīng)用可以加強(qiáng)網(wǎng)站和程序的安全性。系統(tǒng)利用MD5加密算法將用戶信息文件加密后保存,具有以下特點(diǎn):
(1)效率高、實(shí)用方便。程序代碼簡(jiǎn)潔,運(yùn)算量對(duì)計(jì)算機(jī)要求不是太高,運(yùn)算速度快,方便數(shù)據(jù)的快速交換。
(2)安全性高。針對(duì)窮舉密碼方式的暴力破解,系統(tǒng)所采用的本文所提到一些加密的改善技巧比單純的MD5加密算法加密又進(jìn)一步加強(qiáng)了密碼的安全。
小知識(shí)之B/S結(jié)構(gòu)
B/S結(jié)構(gòu)(Browser/Server結(jié)構(gòu))即瀏覽器和服務(wù)器結(jié)構(gòu)。它是隨著Internet技術(shù)的興起,對(duì)C/S結(jié)構(gòu)的一種變化或者改進(jìn)的結(jié)構(gòu)。在這種結(jié)構(gòu)下,用戶工作界面是通過(guò)WWW瀏覽器來(lái)實(shí)現(xiàn)。









