趙素萍
(山西農業大學信息學院信息工程系,晉中 030800)
MD5加密算法的改進及應用
趙素萍
(山西農業大學信息學院信息工程系,晉中 030800)
為了防止用戶信息泄漏,對比介紹MD5加密算法的基本原理,MD5加鹽加密算法,原始密碼打亂順序后加鹽加密并二次加密,并將該算法應用于項目開發的用戶信息保密方面。經過解密工具的解密,發現該算法有絕對的優越性。
MD5;ASP.NET;加鹽加密;二次加密
2011 年曾爆發的密碼泄漏事件,使得600余萬用戶的登錄信息以明文的方式被掛到網上,導致互聯網行業一片人心惶惶。由于大多數用戶將郵箱、微博、游戲、網上支付、購物等賬戶都設置了相同的密碼,那么一旦某一網站的服務器被黑客攻擊后,會導致用戶信息的泄露,更嚴重的是可能導致購物消費賬戶的信息泄漏而涉及到財產安全。
同時,有些網友可能會從瀏覽器上搜“密碼庫”并下載。但是黑客已將該密碼庫文件與病毒綁到了一起,用戶一旦下載就可能將自己的電腦染上病毒,并有可能將此文件在網絡上大量的傳播開。
由此可以看出,網站數據庫若明文保存密碼后,帶來的的后果是非常嚴重并不可預知的。
MD5(Message-Diggest Algorithm 5)算法[1],將輸入的明文數據數組加密以后,輸出密文數據數組[2]。從MD5的散列結果逆推出原文[3]是不可能的。所以MD5具有不可逆性和唯一性。
原始密碼在該算法的加密之后也并不是絕對安全的。為了驗證破解速度,筆者下載MD5計算器并打開在線MD5解密網頁。驗證的步驟如下:
第一步:在MD5計算器中計算出密碼“123456a”加密后的MD5值的字符串為“9cbf8a4dcb8e30682b927 f352d6559a0”,此字符串即為數據庫中保存的字符串。
第二步:將加密后的字符串放到解密網頁進行解碼,而此密碼的解碼速度還不到兩秒鐘的時間,查詢結果如圖1所示。

圖1 MD5計算后解密
通過以上實驗可以看出,所謂道高一尺魔高一丈,加密和解密是不斷互相推進的過程,明文保存的破解引發了密碼泄漏事件,而密碼泄漏事件又引發了密碼加密保存,隨著加密保存的推出,網上又出現了相關的破解工具。解密算法有以下幾種:(1)通過窮舉法比對所有字母、數字以及特殊字符的組合情況,將字符串經過MD5加密后再與數據庫中的MD5值進行比較;(2)將常見密碼與其MD5加密值保存到數據庫中,然后將MD5加密值進行一一比對,相同則將黑客數據庫中的原始密碼輸出。
目前對于密碼的保護問題,一般采取的措施是建議用戶注冊時增加原始密碼的強度,即我們一般在注冊時會有密碼強度的提醒,如果密碼設置的過于簡單,還會時不時收到網站發來的郵件(建議用戶修改密碼以增加密碼強度)。用戶加強密碼的強度原則為,在原密碼的前面、中間或后面加上一些特殊的符號使密碼加長,增強密碼的安全性。從而增加黑客破解密碼的難度。
由此可見,簡單的MD5加密并不能保證用戶信息的絕對安全。只是降低了黑客破解密碼的效率而已。如何在不增加密碼強度的基礎上也能保證用戶密碼的絕對安全呢,這將是本文研究的重點。
為了進一步保護用戶的信息不被泄漏,故需要對MD5加密算法進行進一步的改進,以達到提升系統安全性的目的。
在對用戶密碼進行MD5加密算法之前,先對用戶密碼進行加鹽設置,該算法的實現步驟如下:
(1)程序開發人員或網站管理員設置一個鹽值,并將鹽值存儲到配置文件中;
(2)當用戶需要注冊信息時,后臺獲取用戶輸入的密碼,將密碼與鹽值連接后,再經過MD5加密,加密后的字符串作為密碼保存到數據庫中;
(3)當用戶登錄時,后臺從網頁上取出用戶輸入的用戶名和密碼,并從配置文件中取出程序員設置好的鹽值,將用戶數據的密碼和鹽值連接后經過MD5加密,若加密后的字符串與數據庫中的一致,則登錄正確;若不一致則用戶登錄失敗。
通過以上算法,即使黑客攻擊了數據庫,將加密后的字符串破解后,得到的數據也不是正確的密碼。
然而該算法并不具有絕對的安全性,因為黑客將數據庫攻擊后,該數據庫中所有用戶的密碼都使用了相同的鹽值,將一批密碼解碼后很容易發現規律。進而達到破解密碼的目的。所以簡單的加鹽加密也并不是絕對安全的。
通過對加鹽加密存在潛在隱患的分析,可能很多讀者會想到,將鹽值設置為一個變化的值,那么黑客就發現不了規律了,筆者曾經也看到過一篇論文,他的算法是系統產生一個隨機的字符串R,保存的字符串為將用戶輸入的字符串與隨機字符串R連接后進行加密,然而帶來的問題是,既然是隨機的,用戶注冊和登錄的隨機字符串必然不會相同,導致軟件無法實現登錄功能。唯一的解決辦法是用戶注冊時產生的隨機字符串R必須保存到數據庫中,將來用戶登錄時,后臺要從前臺取出用戶輸入的密碼和數據庫中存儲的隨機字符串R,連接后再進行加密。然而黑客既然已經攻破了數據庫,那么這個隨機字符串黑客還是可以看到的。這相當于直接告訴了黑客每個用戶的鹽值。
由此可見,不論是固定鹽值的加鹽加密算法,還是可變鹽值的加鹽加密算法,都是不安全的。不可否認,只要鹽值設置得當,加鹽加密算法還是具有較強的安全性的。為了加強對用戶信息保護,尤其是對用戶財產安全的保障,在加鹽加密算法的基礎上,還需要進一步對密碼進行加密保護。
首先要設置相應復雜度的鹽值,將用戶輸入的密碼字符串的順序進行打亂,而打亂的方法很多,程序員在設計算法時可自行決定,本文的設計原理為將用戶密碼的前兩個字符截取后連接到剩下字符串的尾部,然后對打亂的字符串加鹽加密后,再經過一次MD5的加密,該算法為:
MD5(MD5(pwd.SubString(2)+pwd.SubString(0,2)+ salt))
通過以上算法,即使黑客攻擊了數據庫,將加密后的字符串破解后,得到的數據也不是正確的密碼。
在ASP.NET中對字符串的MD5加密:NETSDK通過計算哈希值的方法來為用戶輸入的信息進行加密。該實驗基于VS2010和SQL Server 2008平臺,使用C#編程語言,并使用MD5加密算法對用戶輸入的字符串進行了加密。代碼如下:


其中strin為用戶輸入的密碼,salt為用戶設置的鹽值,即使黑客破解了該用戶的密碼,那么密碼也不是正確的密碼。
通過增加用戶原始密碼的強度,對用戶原始密碼的字符串順序進行打亂,對打亂的字符串進行加鹽,對加鹽后的字符串進行多次加密[4]??梢员WC數據的安全性,具有一定的參考價值。需要注意的是,經過簡單MD5算法加密后的密文有可能對應多個明文,即簡單MD5加密算法具有碰撞性。而本文通過一系列的改進,不僅提高了原算法的安全性,同時也增強了密碼的抗碰撞性。
[1]Rivest R.The MD5 Message-Digest Algorithm.RFC 1321,1992,4.
[2]Homer A,Sussman D.ASP.Net高級編程[M].李敏波譯.北京:清華大學出版社,2005.
[3]施衛鋒,周俊.多戶住處系統中數據安全性控制及其實現[J].微機發展,2003(13):12-13.
[4]孫永清,顧雨捷.基于動態注冊碼的軟件加密保護[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-),女,山西太原人,碩士,助教,研究方向為網絡安全
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