基于JAVA技術的MD5加密算法的實現
MD5加密算法與JAVA技術的融合不僅能應用于整個Java體系的WEB開發(fā)領域,而且可廣泛應用于對數據有較高安全性要求的數字簽名、電子商務、數據處理等領域。具有開發(fā)周期短、一次開發(fā)多處應用、可跨平臺使用、運行效率高等的絕對優(yōu)勢。那么我今天就給大家介紹一下基于JAVA技術的MD5加密算法是如何實現的。
一、MD5加密算法描述
MD5加密算法可簡述為:以512位分組來處理輸入字節(jié)串的信息,且每一分組又被劃分為16個32位子分組,經過了一系列的處理后,算法的輸出由4個32位分組組成,將這4個32位分組級聯后將生成一個128位散列值。
在MD5加密算法中,首先需要對信息進行填充,使其字節(jié)長度對512求余的結果等于448。因此,信息的字節(jié)長度(BitsLength)將被擴展至N*512+448,即N*64+56個字節(jié)(Bytes),N為一個正整數。填充的方法是在信息的后面填充一個1和無數個0,直到滿足上面的條件時才停止用0對信息的填充。然后,在這個結果后面附加一個以64位二進制表示的填充前信息長度。經過這2步的處理,現在的信息字節(jié)長度=N*512+448+64=(N+1)*512,即長度恰好是512的整數倍。這樣做的原因是為滿足后面處理中對信息長度的要求。MD5中有4個32位被稱作鏈接變量(ChainingVariable)的整數參數,分別為:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。當設置好這4個鏈接變量后,就開始進入MD5加密算法的四輪循環(huán)運算,循環(huán)的次數是信息中512位信息分組的數目。
將4個鏈接變量復制到另外四個變量中:A到a,B到b,C到c,D到d。主循環(huán)有四輪,每輪循環(huán)都很相似。第一輪進行16次操作,每次操作對a、b、c和d中的其中3個作一次非線性函數運算,然后將所得結果加上第四個變量,文本的一個子分組和一個常數。再將所得結果向右環(huán)移一個不定的數,并加上a、b、c或d中之一,最后用該結果取代a、b、c或d中之一,每次操作中用到的四個非線性函數(每輪一個)分別為F(X,Y,Z)=X&Y|NOT(X)&Z;G(X,Y,Z)=X&Z|Y&NOT(Z);H(X,Y,Z)=XxorYxorZ;I(X,Y,Z)=Yxor(X|NOT(Z));其中如果X、Y和Z的對應位是獨立和均勻的,那么結果的每一位也應是獨立和均勻的,F是一個逐位運算的函數,即,如果X,那么Y,否則Z,函數H是逐位奇偶操作符。
_二、JSP和JavaBean
JSP是基于Java體系的WEB開發(fā)技術,用于創(chuàng)建跨平臺及跨服務器的動態(tài)網頁,與CGI、ASP、PHP等相比,它具有組件和網頁設計從邏輯上分離、良好的擴展性和安全性、一次編寫,到處運行、強調可重用的組件等優(yōu)點。
JavaBean是一種可重用Java組件,它通過封裝業(yè)務邏輯成為功能對象,實現被JavaApplet/Servelet/JSP等Java程序的調用,是目前功能強大及開發(fā)簡單的最好的組件方式。
如果將一些繁瑣或者常用的動作,撰寫于Bean內,可以達到簡化和優(yōu)化JSP網頁結構的目的。如果已有實現某種功能的JavaBean,則創(chuàng)建包含這個功能的Web頁面只需要實例化它,再用HTML表格將它定位即可。
三、基于JAVA技術的MD5加密算法的實現
1、 實現方案
為充分利用JSP的動態(tài)頁面優(yōu)勢和JavaBean的組件優(yōu)勢,實現方案采取用Java實現MD5加密算法,并用JavaBean封裝,利用JSP展現的方式。既保證了一次編寫到處運行0又體現了Java2在比較密集的計算中的高效率。
_2、MD5的JavaBean
{inti,index,partLen;
byte[]block=newbyte[64];
index=(int)(count[0]4443)&0x3F;
if((count[0]+=(inputLen333))3(inputLen333))count[1]++;
count[1]+=(inputLen44429);
partLen=642index;
if(inputLen4=partLen)
{md5Memcpy(buffer,inbuf,index,0,partLen);
md5Transform(buffer);
for(i=partLen;
i+633inputLen;
i+=64){md5Memcpy(block,inbuf,0,i,64);
md5Transform(block);}
index=0;}
elsei=0;
md5Memcpy(buffer,inbuf,index,i,inputLen2i);}
privatevoidmd5Transform(byteblock[])
MD5核心變換程序
{longa=state[0],b=state[1],c=state[2],d=state[3];long[]x=newlong[16];
Decode(x,block,64);/*Round1*/
a=FF(a,b,c,d,x[0],S11,0xd76aa478L);/*1*/
d=FF(d,a,b,c,x[1],S12,0xe8c7b756L);/*2*/
c=FF(c,d,a,b,x[2],S13,0x242070dbL);/*3*/
b=FF(b,c,d,a,x[3],S14,0xc1bdceeeL);/*4*/
a=FF(a,b,c,d,x[4],S11,0xf57c0fafL);/*5*/
d=FF(d,a,b,c,x[5],S12,0x4787c62aL);/*6*/
c=FF(c,d,a,b,x[6],S13,0xa8304613L);/*7*/
b=FF(b,c,d,a,x[7],S14,0xfd469501L);/*8*/
a=FF(a,b,c,d,x[8],S11,0x698098d8L);/*9*/
d=FF(d,a,b,c,x[9],S12,0x8b44f7afL);/*10*/
c=FF(c,d,a,b,x[10],S13,0xffff5bb1L);/*11*/
b=FF(b,c,d,a,x[11],S14,0x895cd7beL);/*12*/
a=FF(a,b,c,d,x[12],S11,0x6b901122L);/*13*/
d=FF(d,a,b,c,x[13],S12,0xfd987193L);/*14*/
c=FF(c,d,a,b,x[14],S13,0xa679438eL);/*15*/
b=FF(b,c,d,a,x[15],S14,0x49b40821L);/*16*/
3、 JSP中調用JavaBean
使用這個Bean只需要在JSP應用程序的WEB-INF/classes下建立一個beartool目錄,然后將上述JavaBean程序編譯得到的MD5。class拷貝到這個目錄下,在需要使用MD5加密算法加密的JSP頁面中使用3jsp:useBeanid=.oMD5.scope=.request.class=.beartool.MD5./4就可實現MD5JavaBean的調用。其中id為建立Bean的實例時用的實例變量名。
隨著Internet技術的不斷發(fā)展,Web應用正逐步走向電子商務和企業(yè)級應用,其復雜性、動態(tài)性、安全性要求更高,分離處理邏輯顯示方式的JSP,便于封裝復用的JavaBean組件為Java技術的Web應用開發(fā)提供了優(yōu)秀的解決方案,并具有強擴展性、易收縮性等優(yōu)勢。利用JSP和JavaBean技術實現的MD5加密算法,既充分體現了Java/一次編寫,到處運行0的技術優(yōu)勢,又大幅增強數據安全性,必將在Web應用領域發(fā)揮重要作用,具有廣泛的應用前景。
小知識之MD5加密算法
MD5就是采用單向加密的加密算法,對于MD5而言,有兩個特性是很重要的,第一是任意兩段明文數據,加密以后的密文不能是相同的;第二是任意一段明文數據,經過加密以后,其結果必須永遠是不變的。前者的意思是不可能有任意兩段明文加密以后得到相同的密文,后者的意思是如果我們加密特定的數據,得到的密文一定是相同的。










