Md5加密算法的改進方法

簡單的MD5加密算法是無法達到絕對的安全的,普通的MD5加密算法有多種暴力破解方式,如果想要保證信息系統(tǒng)或者網(wǎng)站的安全,就需要對MD5加密算法進行改進,增強其安全性,下面我就來談談如何在MD5加密算法的基礎上進行改進!

目前MD5加密算法的缺陷

目前的信息系統(tǒng)中,對MD5加密方法的利用主要通過在腳本頁面中引用包含Md5加密函數(shù)代碼的文件,以asp腳本為例,在需要調用的頁面中加入,md5.asp為MD5加密函數(shù)代碼文件,然后直接調用函數(shù)MD5(sMessage)即可,MD5加密后的值有16位和32位之分,如果在md5加密函數(shù)中使用的是MD5 = LCase(WordToHex(a) & WordToHex(b) & WordToHex(c) & WordToHex(d)),則表示是32位,如果使用的是MD5=LCase(WordToHex(b) & WordToHex(c)),則表示是16位。例如對明文為“123456”的值進行加密,其md5值有兩個,如下所示:

A=“123456”
password=md5(A)= 49ba59abbe56e057
password=md5(A)= e10adc3949ba59abbe56e057f20f883e

如果將加密的MD5值直接保存在數(shù)據(jù)庫,當網(wǎng)站存在注入或者其它漏洞時,入侵者極有可能獲取用戶的密碼值,通過md5在線查詢或者暴力破解可以得到密碼。

Md5加密算法的改進方法

本文提到的方法是在使用Md5加密算法對明文(口令)加密的基礎上,對密文進行了改變,在密文中截取一段數(shù)據(jù)并丟棄,然后使用隨機函數(shù)填充被丟棄的數(shù)據(jù),且整個過程不改變md5加密后的位數(shù)。

其加密過程用算法描述如下:

(1)對明文password進行md5加密,獲得密文md5(password)。

(2)使用截取函數(shù)截取加密后的密文,從第beginnumber位置開始截取number位數(shù)值,得到密碼A,其中A=left(md5(password),beginnumber-1)。

(3)使用截取函數(shù)截取加密后的明文的number位數(shù)后的值B,其中 B=right(md5(password),md5-digit -(beginnumber+number-1))。

(4)使用隨機函數(shù)gen_key(number)填充被截取的number的值。

(5)變換后的密碼值為encrypt_password =A&get_key(number)&B

變量說明:

password:客戶端提交的原始密碼
encrypt_password:經(jīng)過處理后的密碼
beginnumber:對原始密碼開始截取的位置(0number:對密碼截取位數(shù)(0md5-digit:md5取16位或者32位值

解密過程跟加密過程有些類似,先對輸入的明文進行加密,接著從beginnumber處截取前半部分得到A′,后半部分得到B′,然后從數(shù)據(jù)庫中讀出密碼中的A和B部分,最后如果A=A′并且B=B′,則認為用戶輸入的密碼跟數(shù)據(jù)庫中的密碼是匹配的。

雖然目前有很多諸如SQL注入、跨站攻擊等攻擊MD5加密算法的方法,可以較容易的獲取數(shù)據(jù)庫中的值,但通過本方法對MD5加密算法進行改進后,在網(wǎng)站或者系統(tǒng)代碼泄露前,其數(shù)據(jù)是相對安全的。

小知識之MD5加密算法

MD5即Message-Digest Algorithm 5,用于確保信息傳輸完整一致。是計算機廣泛使用的雜湊算法之一(又譯摘要算法、哈希算法),主流編程語言普遍已有MD5實現(xiàn)。