趙素萍
(山西農(nóng)業(yè)大學信息學院信息工程系,晉中 030800)
MD5加密算法的改進及應用
趙素萍
(山西農(nóng)業(yè)大學信息學院信息工程系,晉中 030800)
為了防止用戶信息泄漏,對比介紹MD5加密算法的基本原理,MD5加鹽加密算法,原始密碼打亂順序后加鹽加密并二次加密,并將該算法應用于項目開發(fā)的用戶信息保密方面。經(jīng)過解密工具的解密,發(fā)現(xiàn)該算法有絕對的優(yōu)越性。
MD5;ASP.NET;加鹽加密;二次加密
2011 年曾爆發(fā)的密碼泄漏事件,使得600余萬用戶的登錄信息以明文的方式被掛到網(wǎng)上,導致互聯(lián)網(wǎng)行業(yè)一片人心惶惶。由于大多數(shù)用戶將郵箱、微博、游戲、網(wǎng)上支付、購物等賬戶都設置了相同的密碼,那么一旦某一網(wǎng)站的服務器被黑客攻擊后,會導致用戶信息的泄露,更嚴重的是可能導致購物消費賬戶的信息泄漏而涉及到財產(chǎn)安全。
同時,有些網(wǎng)友可能會從瀏覽器上搜“密碼庫”并下載。但是黑客已將該密碼庫文件與病毒綁到了一起,用戶一旦下載就可能將自己的電腦染上病毒,并有可能將此文件在網(wǎng)絡上大量的傳播開。
由此可以看出,網(wǎng)站數(shù)據(jù)庫若明文保存密碼后,帶來的的后果是非常嚴重并不可預知的。
MD5(Message-Diggest Algorithm 5)算法[1],將輸入的明文數(shù)據(jù)數(shù)組加密以后,輸出密文數(shù)據(jù)數(shù)組[2]。從MD5的散列結果逆推出原文[3]是不可能的。所以MD5具有不可逆性和唯一性。
原始密碼在該算法的加密之后也并不是絕對安全的。為了驗證破解速度,筆者下載MD5計算器并打開在線MD5解密網(wǎng)頁。驗證的步驟如下:
第一步:在MD5計算器中計算出密碼“123456a”加密后的MD5值的字符串為“9cbf8a4dcb8e30682b927 f352d6559a0”,此字符串即為數(shù)據(jù)庫中保存的字符串。
第二步:將加密后的字符串放到解密網(wǎng)頁進行解碼,而此密碼的解碼速度還不到兩秒鐘的時間,查詢結果如圖1所示。
圖1 MD5計算后解密
通過以上實驗可以看出,所謂道高一尺魔高一丈,加密和解密是不斷互相推進的過程,明文保存的破解引發(fā)了密碼泄漏事件,而密碼泄漏事件又引發(fā)了密碼加密保存,隨著加密保存的推出,網(wǎng)上又出現(xiàn)了相關的破解工具。解密算法有以下幾種:(1)通過窮舉法比對所有字母、數(shù)字以及特殊字符的組合情況,將字符串經(jīng)過MD5加密后再與數(shù)據(jù)庫中的MD5值進行比較;(2)將常見密碼與其MD5加密值保存到數(shù)據(jù)庫中,然后將MD5加密值進行一一比對,相同則將黑客數(shù)據(jù)庫中的原始密碼輸出。
目前對于密碼的保護問題,一般采取的措施是建議用戶注冊時增加原始密碼的強度,即我們一般在注冊時會有密碼強度的提醒,如果密碼設置的過于簡單,還會時不時收到網(wǎng)站發(fā)來的郵件(建議用戶修改密碼以增加密碼強度)。用戶加強密碼的強度原則為,在原密碼的前面、中間或后面加上一些特殊的符號使密碼加長,增強密碼的安全性。從而增加黑客破解密碼的難度。
由此可見,簡單的MD5加密并不能保證用戶信息的絕對安全。只是降低了黑客破解密碼的效率而已。如何在不增加密碼強度的基礎上也能保證用戶密碼的絕對安全呢,這將是本文研究的重點。
為了進一步保護用戶的信息不被泄漏,故需要對MD5加密算法進行進一步的改進,以達到提升系統(tǒng)安全性的目的。
在對用戶密碼進行MD5加密算法之前,先對用戶密碼進行加鹽設置,該算法的實現(xiàn)步驟如下:
(1)程序開發(fā)人員或網(wǎng)站管理員設置一個鹽值,并將鹽值存儲到配置文件中;
(2)當用戶需要注冊信息時,后臺獲取用戶輸入的密碼,將密碼與鹽值連接后,再經(jīng)過MD5加密,加密后的字符串作為密碼保存到數(shù)據(jù)庫中;
(3)當用戶登錄時,后臺從網(wǎng)頁上取出用戶輸入的用戶名和密碼,并從配置文件中取出程序員設置好的鹽值,將用戶數(shù)據(jù)的密碼和鹽值連接后經(jīng)過MD5加密,若加密后的字符串與數(shù)據(jù)庫中的一致,則登錄正確;若不一致則用戶登錄失敗。
通過以上算法,即使黑客攻擊了數(shù)據(jù)庫,將加密后的字符串破解后,得到的數(shù)據(jù)也不是正確的密碼。
然而該算法并不具有絕對的安全性,因為黑客將數(shù)據(jù)庫攻擊后,該數(shù)據(jù)庫中所有用戶的密碼都使用了相同的鹽值,將一批密碼解碼后很容易發(fā)現(xiàn)規(guī)律。進而達到破解密碼的目的。所以簡單的加鹽加密也并不是絕對安全的。
通過對加鹽加密存在潛在隱患的分析,可能很多讀者會想到,將鹽值設置為一個變化的值,那么黑客就發(fā)現(xiàn)不了規(guī)律了,筆者曾經(jīng)也看到過一篇論文,他的算法是系統(tǒng)產(chǎn)生一個隨機的字符串R,保存的字符串為將用戶輸入的字符串與隨機字符串R連接后進行加密,然而帶來的問題是,既然是隨機的,用戶注冊和登錄的隨機字符串必然不會相同,導致軟件無法實現(xiàn)登錄功能。唯一的解決辦法是用戶注冊時產(chǎn)生的隨機字符串R必須保存到數(shù)據(jù)庫中,將來用戶登錄時,后臺要從前臺取出用戶輸入的密碼和數(shù)據(jù)庫中存儲的隨機字符串R,連接后再進行加密。然而黑客既然已經(jīng)攻破了數(shù)據(jù)庫,那么這個隨機字符串黑客還是可以看到的。這相當于直接告訴了黑客每個用戶的鹽值。
由此可見,不論是固定鹽值的加鹽加密算法,還是可變鹽值的加鹽加密算法,都是不安全的。不可否認,只要鹽值設置得當,加鹽加密算法還是具有較強的安全性的。為了加強對用戶信息保護,尤其是對用戶財產(chǎn)安全的保障,在加鹽加密算法的基礎上,還需要進一步對密碼進行加密保護。
首先要設置相應復雜度的鹽值,將用戶輸入的密碼字符串的順序進行打亂,而打亂的方法很多,程序員在設計算法時可自行決定,本文的設計原理為將用戶密碼的前兩個字符截取后連接到剩下字符串的尾部,然后對打亂的字符串加鹽加密后,再經(jīng)過一次MD5的加密,該算法為:
MD5(MD5(pwd.SubString(2)+pwd.SubString(0,2)+ salt))
通過以上算法,即使黑客攻擊了數(shù)據(jù)庫,將加密后的字符串破解后,得到的數(shù)據(jù)也不是正確的密碼。
在ASP.NET中對字符串的MD5加密:NETSDK通過計算哈希值的方法來為用戶輸入的信息進行加密。該實驗基于VS2010和SQL Server 2008平臺,使用C#編程語言,并使用MD5加密算法對用戶輸入的字符串進行了加密。代碼如下:
其中strin為用戶輸入的密碼,salt為用戶設置的鹽值,即使黑客破解了該用戶的密碼,那么密碼也不是正確的密碼。
通過增加用戶原始密碼的強度,對用戶原始密碼的字符串順序進行打亂,對打亂的字符串進行加鹽,對加鹽后的字符串進行多次加密[4]。可以保證數(shù)據(jù)的安全性,具有一定的參考價值。需要注意的是,經(jīng)過簡單MD5算法加密后的密文有可能對應多個明文,即簡單MD5加密算法具有碰撞性。而本文通過一系列的改進,不僅提高了原算法的安全性,同時也增強了密碼的抗碰撞性。
[1]Rivest R.The MD5 Message-Digest Algorithm.RFC 1321,1992,4.
[2]Homer A,Sussman D.ASP.Net高級編程[M].李敏波譯.北京:清華大學出版社,2005.
[3]施衛(wèi)鋒,周俊.多戶住處系統(tǒng)中數(shù)據(jù)安全性控制及其實現(xiàn)[J].微機發(fā)展,2003(13):12-13.
[4]孫永清,顧雨捷.基于動態(tài)注冊碼的軟件加密保護[J].計算機工程,2007,33(12):183-184
Improvement and Application of MD5 Encryption Algorithm
ZHAO Su-ping
(Department of Information Engineering,College of Information,Shanxi Agricultural University,Jinzhong 030800)
In order to protect user's information,introduces the basic principle of MD5 encryption algorithm,MD5 encryption algorithm with salt.Dis?turbs the order of the original password,then uses MD5 encryption algorithm with salt,and then secondary encryption,upsets the order and two salt encryption.Finally applies the algorithm to protect the customer's information of project development.After decryption tool,finds that the algorithm has the absolute superiority.
趙素萍(1986-),女,山西太原人,碩士,助教,研究方向為網(wǎng)絡安全
2017-03-14
2017-05-20
1007-1423(2017)15-0060-03
10.3969/j.issn.1007-1423.2017.15.016
MD5;ASP.NET;Add Salt to Encryption;Secondary Encryption