一種偽32位MD5加密算法設(shè)計(jì)與實(shí)現(xiàn)

隨著高校數(shù)字化校園進(jìn)程的推進(jìn),校園網(wǎng)也是部署各類應(yīng)用系統(tǒng)的基礎(chǔ)平臺,無論是校園內(nèi)網(wǎng)還是Web服務(wù)器,網(wǎng)絡(luò)的安全時刻受到威脅。比如網(wǎng)絡(luò)釣魚、SQl注入及主頁篡改等黑客常見攻擊,為此,校園網(wǎng)的后臺登陸安全是一個十分嚴(yán)峻的問題,結(jié)合學(xué)院網(wǎng)站建設(shè)實(shí)際,反復(fù)測試,我們總結(jié)出了一種偽32位的MD5加密算法,對登陸的用戶名和密碼進(jìn)行有效加密防御,在很大程度上解決了從網(wǎng)站后臺登陸進(jìn)行Sql注入的可能。

一、MD5加密算法簡介

MD5即Message-DigestAlgorithm5(信息——摘要算法5),是一種用于產(chǎn)生數(shù)字簽名的單項(xiàng)散列加密算法,在1991年由MITLaboratoryforComputerSci2ence(IT計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室)和RSADataSecurityInc(RSA數(shù)據(jù)安全公司)的RonaldL.Rivest教授開發(fā)出來,經(jīng)由MD2、MD3和MD4發(fā)展而來。MD5加密算法的使用不需要支付任何版權(quán)費(fèi)用。它的作用是讓大容量信息在用數(shù)字簽名軟件簽私人密匙前被“壓縮”成一種保密的格式(將一個任意長度的“字節(jié)串”通過一個不可逆的字符串變換算法變換成一個128bit的大整數(shù),換句話說就是,即使你看到源程序和加密算法描述,也無法將一個MD5的值變換回原始的字符串,從數(shù)學(xué)原理上說,是因?yàn)樵嫉淖址袩o窮多個,這有點(diǎn)象不存在反函數(shù)的數(shù)學(xué)函數(shù))。

MD5廣泛用于加密和解密技術(shù)上。例如在UNIX系統(tǒng)中用戶的密碼就是以MD5(或其它類似算法)經(jīng)加密后存儲在文件系統(tǒng)中。當(dāng)用戶登錄時,系統(tǒng)把用戶輸入的密碼計(jì)算成MD5值,然后再去和保存在文件系統(tǒng)中的MD5值進(jìn)行比較,進(jìn)而確定輸入的密碼是否正確。通過這樣的步驟,系統(tǒng)在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統(tǒng)的合法性。

二、偽32位MD5加密算法設(shè)計(jì)

MD5加密算法設(shè)計(jì)原理是將兩個16位的真實(shí)MD5碼值,通過握手方法組合起來形成新的32位的密文,加密過程如圖1所示。

一種偽32位MD5加密算法設(shè)計(jì)與實(shí)現(xiàn)

其中Zlm()表示加密方法,其功能就是將制作者的握手方法實(shí)現(xiàn),從而實(shí)現(xiàn)數(shù)據(jù)文件加密。這種加密算法實(shí)現(xiàn)了同一個密碼,隨機(jī)生成不同密文的過程。舉例說明:假如密碼明文為“admin”,兩次點(diǎn)擊鼠標(biāo)產(chǎn)生的密文卻相差甚遠(yuǎn)。這個過程在VisualBasic6.0下測試運(yùn)行,如圖2所示。

一種偽32位加密算法設(shè)計(jì)與實(shí)現(xiàn)

從圖1中不難看出此算法核心是握手方法,即如何將真的16位密文和隨機(jī)生成的16位密文組合,形成偽32位密文。而握手方法的制定就是開發(fā)者自己,所以從很大程度上提高了算法的想象空間和靈活性。

其解密算法Zlj(),當(dāng)然是逆運(yùn)算過程,如圖3所示。對方只要知道握手原理(即加密算法)即可實(shí)現(xiàn)。而對于不明白握手方法的入侵者來說,按照32位MD5的破解程序運(yùn)行的結(jié)果也就是偽明文了。

一種偽32位MD5加密算法設(shè)計(jì)與實(shí)現(xiàn)

最后這兩個方法Zlm()和Zlj()在VB環(huán)境下利用ActiveXDll技術(shù)進(jìn)行封裝,編譯成為通用組件MD32.dll,使加密算法源碼得到了保護(hù),結(jié)合握手方法,安全性得到了最大保障。

三、偽32位MD5加密算法測試

1、 應(yīng)用測試

每一個應(yīng)用系統(tǒng)都有密碼修改模塊,在校園網(wǎng)站后臺進(jìn)行登陸測試成功后,我們對密碼修改模塊做了重點(diǎn)測試,流程如圖4所示。

一種偽32位MD5加密算法設(shè)計(jì)與實(shí)現(xiàn)
應(yīng)用表明,該偽碼加密算法的通用組件MD32.dll,調(diào)用方便,功能強(qiáng)大,代碼的執(zhí)行效率高,安全性好,無論是源代碼反查還是反編譯DLL文件均無法破解我們的握手原理。

附密碼修改源碼如下:

<%d

imM

setM=server.CreateObject("MD32.MD5")’建立MD32對象

iftrim(request("newpwd"))<>""then

ifsession("isadmin")="1"then

sql="select3fromtbadminwhereadminid="&request.cookies("adminid")

else

sql="select3fromtbuserwhereuserid="&request.cookies("userid")

endif

setrs=server.createobject("adodb.recordset")rs.opensql,conn,3,2

ifM.zlj(rs("pwd"))<>M.MD5(trim(request("oldpwd")))then解密后的密文和加密的MD5密文比較

response.redirect"editpwd.asp?error=wrong"

else

rs("pwd")=M.zlm(M.MD5(trim(request("newpwd"))))’32位偽碼生成

rs.update

response.redirect"editpwd.asp?error=ok"

endif

endif

%>

2、破解測試

目前通用的MD5在線查詢和破解的網(wǎng)站很多。這些網(wǎng)站都可以在線查詢和解密MD5加密算法。

下面我們就拿admin做測試用例,admin的32位MD5密文是21232f297a57a5a743894a0e4a801fc3,利用偽碼算法隨即產(chǎn)生一個偽32位的MD5密文,677ad5273a75bae744d3a83904aac0ee。將其破解結(jié)果如圖5和圖6所示。

一種偽32位MD5加密算法設(shè)計(jì)與實(shí)現(xiàn)

從結(jié)果看出,由于采用了偽碼加密算法,很多常規(guī)破解的網(wǎng)站,在線破解的結(jié)果基本都是“NotFound”,短時間內(nèi)猜不出加密明文。真正意義上實(shí)現(xiàn)了對數(shù)據(jù)庫數(shù)據(jù)的保護(hù)。另外,偽碼加密算法的思想為我們今后的安全設(shè)計(jì)提供了一種解決方案。

小知識之偽碼

偽碼即PDL,這是一個籠統(tǒng)的名稱,它是用正文形式表示數(shù)據(jù)和處理過程的設(shè)計(jì)工具。