王紅偉 王紅紀
摘 要:目前,大多數(shù)的信息管理系統(tǒng)在設計實現(xiàn)過程中,都設計有用戶身份驗證的登錄界面?,F(xiàn)在用的較多的在線QQ聊天軟件、手機微信聊天軟件、各大銀行銀聯(lián)取款軟件等,程序設計模塊的第一個模塊就是身份驗證模塊,此模塊對于信息管理系統(tǒng)中數(shù)據(jù)的私密性起到關鍵性的保護作用。
關鍵詞:手機app MD5算法 加密
中圖分類號:G712 文獻標識碼:A 文章編號:1672-3791(2017)01(c)-0182-02
高等職業(yè)技術學校的專業(yè)開設與課程體系的構建與現(xiàn)代社會發(fā)展需求密切相關。社會經濟大力的發(fā)展的同時,科學技術也日新月異。智能手機也逐步走入每個家庭。基于智能手機操作系統(tǒng)的android程序開發(fā)也成為信息類應用技術開發(fā)專業(yè)開設的必備課程。在Android課程的教學設計、教學實現(xiàn)過程中,各種手機app作為教學項目走入學生課堂。像大多數(shù)以往我們所用的各種信息管理系統(tǒng)一樣,手機APP中的信息管理系統(tǒng)在運行開始階段,也加入了用戶身份驗證模塊,信息的加密方式有很多,該文中從加密算法的原理、應用等方面分析了Andorid應用程序中MD5加密算法。
1 MD5加密算法
加密算法類型有多種,MD5算法屬于散列算法,安全性高。它的過程是不可逆的過程。用戶在界面輸入的兩個不同的密碼值,通過MD5算法之后,不會得到相同的輸出值。反之,根據(jù)輸出值,也不能得到原始的數(shù)據(jù)。所以,要解密MD5是沒有便捷的算法可用的,惟一的能用的方法是窮舉法,即把可能出現(xiàn)的密碼值用MD5算法散列之后,把得到的值與原始數(shù)據(jù)形成一對一的映射表,通過比對從映射表中找出對應的原始密碼。
2 MD5的安全性
MD5加密算法的輸出為128位。由于解密過程保用窮舉法,在進行大量數(shù)據(jù)的比對過程中,數(shù)據(jù)驗證計算量超大,因此這種方法費時費力,從而加大的密碼的安全性。出于對MD5加密算法安全性的考慮,另外MD5加密算法可以免費使用,因此加密方法被廣泛使用。對于職業(yè)院校中針對計算機應用專業(yè)課程開發(fā)的信息管理系統(tǒng)來說,MD5算法可以用在用戶注冊口令時的加密設計。
3 MD5加密原理
MD5加密算法的實現(xiàn)過程從開始到輸出結果分五步驟完成。
第一步先進行補位操作:如果輸入的數(shù)據(jù)位數(shù)不夠的話,要先進行補位操作。MD5算法要求輸入的數(shù)據(jù)位長度對512求余的結果是448。
第二步是補數(shù)據(jù)長度操作:輸入數(shù)據(jù)用一個64位的數(shù)字表示其原始長度。再把這個數(shù)據(jù)用兩個32位數(shù)表示,得到的數(shù)據(jù)將會是長度為512位的倍數(shù)。這是為了解決后續(xù)數(shù)據(jù)處理中對信息長度的要求。
第三步是初始化MD5參數(shù)操作:MD5在初始化時需要4個十六進制整數(shù)(X1,X2,X3,X4,)作為參數(shù),初始化值是:X1=0X01234567,X2=0X89abcdef,X3=0Xfedcba98,X4=0X76543210。
第四步是進入MD5算法的循環(huán)運算過程:在這個處理過程中用到四個處理函數(shù),它們分別是:
F(x1,x2,x3)=( x1& x2)|((~ x1)& x3)
G(x1,x2,x3)=( x1&z)|( x2&(~ x3))
H(x1,x2,x3)= x1^ x2^ x3
I(x1,x2,x3)= x2^( x1 (~x3))
其中,^是異或,&是與,|是或,~是反符號。
首先把MD5初始化時的4個參數(shù)值保存到(X1、X2、X3、X4)依次保存到四個變量(x1、x2、x3、x4)中。主循環(huán)有四次,每次循環(huán)操作過程中,都要對x1、x2、x3、x4中的其中3個作一次線性函數(shù)運算,然后將所得結果加上第四個變量,再將所得結果向右移一個不定的數(shù),并加上x1、x2、x3、x4中的一個。最后計算的結果取代a、b、c或d中之一。如果x1、x2和x3的對應位是獨立和均勻的,那么結果的每一位也是獨立和均勻的。F是一個逐位運算的函數(shù):如果x1,那么x2,否則x3。函數(shù)H是逐位奇偶操作符。
第五步是MD5算法中的分組數(shù)據(jù)運算過程:把MD5初始化時的四個參數(shù)X1、X2、X3、X4、分別加上x1、x2、x3、x4后的數(shù)據(jù)繼續(xù)運行算法,最后的輸出是由DCBA組成128位結果(其中A是低位,D為高位)。
4 MD5算法具體實現(xiàn)
手機APP程序設計的身份驗證功能中,在登錄按鈕的setOnClickListener方法中進行密碼驗證中設計代碼如下:(登錄按鈕的名字為loginbtn)
String user,pass;
定義變量用于獲取密碼框(此組件名字是password)中用戶輸入的密碼值:pass=password.getText().toString();
用MD5算法對密碼進行加密:String passmd5=MD5(pass);
加密后密碼與存儲密碼進行比較(oldpass是存儲信息中密碼):if(passmd5.equals(oldpass)){//此處是密碼對比成功后的代碼設置}
設計MD3()方法,此方法的參數(shù)為字符串變量str, 方法返回的值為字符串newstr:
MessageDigest myDigest=MessageDigest.getInstance(“MD5”);
byte [] myResult= myDigest.digest(password.getBytes());
StringBuilder myString=new StringBuilder();
for( byte myB: myResult){
int num=b&0xff;
String s=Integer.toHexString(num);
if (s.length()==1){ myString .append(“0”+s);}
else { myString .append(+s);}
}//最后的myString就是經過MD5算法后得到的結果數(shù)據(jù)。
5 加密算法的使用建議
在目前所開發(fā)的各種信息系統(tǒng)中,對Md5加密方法的運用主要是在應用程序的登錄界面中,對用戶輸入的密碼文本進行加密時直接調用第四步中定義過的加密函數(shù)進行數(shù)據(jù)處理可以得到加密后的密碼。但是如果將加密后的數(shù)據(jù)直接保存在數(shù)據(jù)庫時,破解者還是可以通過MD5在線查詢或者暴力破解可以得到密碼。所以我們可以在加密的基礎上,對密文進行改變,在密文中截取一段數(shù)據(jù)并丟棄,然后使用隨機函數(shù)填充被丟棄的數(shù)據(jù),且整個過程不改變MD5加密后的位數(shù)。
從軟件安全角度來說,程序使用過程的加密設置是極其重要的。從程序開發(fā)與設計角度來說,解密過程也是不可避免的。任何程序的加密設計方案隨著時間的發(fā)展,最終都會出現(xiàn)相應的解密方案來破解。程序設計中的加密算法多種多樣,該文中MD5加密算法只是在某種程度上保證了程序使用過程中數(shù)據(jù)的相對安全性。
參考文獻
[1] hualang.Android雜談-用MD5加密算法加密密碼[EB/OL].2011.8.http://www.iteye.com/topic/1113569.
[2] 牛耳教育.分析MD5加密算法原理[EB/OL].2010.7.http://blog.sina.com.cn/csneweredu.
[3] Md5加密算法的原理及應用[EB/OL].2011.9.http://libin52008.blog.163.com/blog/static/105327187201186981459/淡然.