jsp的MD5加密 2.docx
- 文档编号:4336194
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:10
- 大小:20.10KB
jsp的MD5加密 2.docx
《jsp的MD5加密 2.docx》由会员分享,可在线阅读,更多相关《jsp的MD5加密 2.docx(10页珍藏版)》请在冰豆网上搜索。
jsp的MD5加密2
在JSP中实现MD5加密
-----------------------------------------------------------------------
/************************************************
MD5算法之JavaBean
@author:
TopcatTuppin
LastModified:
10,Mar,2001
*************************************************/
packagebeartool;
importjava.lang.reflect.*;
/*************************************************
md5类实现了RSADataSecurity,Inc.在提交给IETF
之RFC1321中之MD5message-digest算法。
*************************************************/
publicclassMD5{
/*下面这些S11-S44实际上是一个4*4之矩阵,在原始之C实现中是用#define实现之,
这里把它们实现成为staticfinal是表示了只读,切能在同一个进程空间内之多个
Instance间共享*/
staticfinalintS11=7;
staticfinalintS12=12;
staticfinalintS13=17;
staticfinalintS14=22;
staticfinalintS21=5;
staticfinalintS22=9;
staticfinalintS23=14;
staticfinalintS24=20;
staticfinalintS31=4;
staticfinalintS32=11;
staticfinalintS33=16;
staticfinalintS34=23;
staticfinalintS41=6;
staticfinalintS42=10;
staticfinalintS43=15;
staticfinalintS44=21;
staticfinalbyte[]PADDING={-128,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
/*下面之三个成员是MD5计算过程中用到之3个核心数据,在原始之C实现中
被定义到MD5_CTX结构中
*/
privatelong[]state=newlong[4];//state(ABCD)
privatelong[]count=newlong[2];//numberofbits,modulo2^64(lsbfirst)
privatebyte[]buffer=newbyte[64];//inputbuffer
/*digestHexStr是MD5之唯一一个公共成员,是最新一次计算结果之
16进制ASCII表示.
*/
publicStringdigestHexStr;
/*digest,是最新一次计算结果之2进制内部表示,表示128bit之MD5值.
*/
privatebyte[]digest=newbyte[16];
/*
getMD5ofStr是类MD5最主要之公共方法,入口参数是你想要进行MD5变换之字符串
返回之是变换完之结果,这个结果是从公共成员digestHexStr取得之.
*/
publicStringgetMD5ofStr(Stringinbuf){
md5Init();
md5Update(inbuf.getBytes(),inbuf.length());
md5Final();
digestHexStr="";
for(inti=0;i<16;i++){
digestHexStr+=byteHEX(digest[i]);
}
returndigestHexStr;
}
//这是MD5这个类之标准构造函数,JavaBean要求有一个public之并且没有参数之构造函数
publicMD5(){
md5Init();
return;
}
/*md5Init是一个初始化函数,初始化核心变量,装入标准之幻数*/
privatevoidmd5Init(){
count[0]=0L;
count[1]=0L;
///*Loadmagicinitializationconstants.
state[0]=0x67452301L;
state[1]=0xefcdab89L;
state[2]=0x98badcfeL;
state[3]=0x10325476L;
return;
}
/*F,G,H,I是4个基本之MD5函数,在原始之MD5之C实现中,由于它们是
简单之位运算,可能出于效率之考虑把它们实现成了宏,在java中,我们把它们
实现成了private方法,名字保持了原来C中之。
*/
privatelongF(longx,longy,longz){
return(x&y)|((~x)&z);
}
privatelongG(longx,longy,longz){
return(x&z)|(y&(~z));
}
privatelongH(longx,longy,longz){
returnx^y^z;
}
privatelongI(longx,longy,longz){
returny^(x|(~z));
}
/*
FF,GG,HH和II将调用F,G,H,I进行近一步变换
FF,GG,HH,andIItransformationsforrounds1,2,3,and4.
Rotationisseparatefromadditiontopreventrecomputation.
*/
privatelongFF(longa,longb,longc,longd,longx,longs,
longac){
a+=F(b,c,d)+x+ac;
a=((int)a<>>(32-s));
a+=b;
returna;
}
privatelongGG(longa,longb,longc,longd,longx,longs,
longac){
a+=G(b,c,d)+x+ac;
a=((int)a<>>(32-s));
a+=b;
returna;
}
privatelongHH(longa,longb,longc,longd,longx,longs,
longac){
a+=H(b,c,d)+x+ac;
a=((int)a<>>(32-s));
a+=b;
returna;
}
privatelongII(longa,longb,longc,longd,longx,longs,
longac){
a+=I(b,c,d)+x+ac;
a=((int)a<>>(32-s));
a+=b;
returna;
}
/*
md5Update是MD5之主计算过程,inbuf是要变换之字节串,inputlen是长度,这个
函数由getMD5ofStr调用,调用之前需要调用md5init,因此把它设计成private之
*/
privatevoidmd5Update(byte[]inbuf,intinputLen){
inti,index,partLen;
byte[]block=newbyte[64];
index=(int)(count[0]>>>3)&0x3F;
///*Updatenumberofbits*/
if((count[0]+=(inputLen<<3))<(inputLen<<3))
count[1]++;
count[1]+=(inputLen>>>29);
partLen=64-index;
//Transformasmanytimesaspossible.
if(inputLen>=partLen){
md5Memcpy(buffer,inbuf,index,0,partLen);
md5Transform(buffer);
for(i=partLen;i+63 md5Memcpy(block,inbuf,0,i,64); md5Transform(block); } index=0; }else i=0; ///*Bufferremaininginput*/ md5Memcpy(buffer,inbuf,index,i,inputLen-i); } /* md5Final整理和填写输出结果 */ privatevoidmd5Final(){ byte[]bits=newbyte[8]; intindex,padLen; ///*Savenumberofbits*/ Encode(bits,count,8); ///*Padoutto56mod64. index=(int)(count[0]>>>3)&0x3f; padLen=(index<56)? (56-index): (120-index); md5Update(PADDING,padLen); ///*Appendlength(beforepadding)*/ md5Update(bits,8); ///*Storestateindigest*/ Encode(digest,state,16); } /*md5Memcpy是一个内部使用之byte数组之块拷贝函数,从input之inpos开始把len长度之 字节拷贝到output之outpos位置开始 */ privatevoidmd5Memcpy(byte[]output,byte[]input, intoutpos,intinpos,intlen) { inti; for(i=0;i output[outpos+i]=input[inpos+i]; } /* md5Transform是MD5核心变换程序,有md5Update调用,block是分块之原始字节 */ privatevoidmd5Transform(byteblock[]){ 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*/ /*Round2*/ a=GG(a,b,c,d,x[1],S21,0xf61e2562L);/*17*/ d=GG(d,a,b,c,x[6],S22,0xc040b340L);/*18*/ c=GG(c,d,a,b,x[11],S23,0x265e5a51L);/*19*/ b=GG(b,c,d,a,x[0],S24,0xe9b6c7aaL);/*20*/ a=GG(a,b,c,d,x[5],S21,0xd62f105dL);/*21*/ d=GG(d,a,b,c,x[10],S22,0x2441453L);/*22*/ c=GG(c,d,a,b,x[15],S23,0xd8a1e681L);/*23*/ b=GG(b,c,d,a,x[4],S24,0xe7d3fbc8L);/*24*/ a=GG(a,b,c,d,x[9],S21,0x21e1cde6L);/*25*/ d=GG(d,a,b,c,x[14],S22,0xc33707d6L);/*26*/ c=GG(c,d,a,b,x[3],S23,0xf4d50d87L);/*27*/ b=GG(b,c,d,a,x[8],S24,0x455a14edL);/*28*/ a=GG(a,b,c,d,x[13],S21,0xa9e3e905L);/*29*/ d=GG(d,a,b,c,x[2],S22,0xfcefa3f8L);/*30*/ c=GG(c,d,a,b,x[7],S23,0x676f02d9L);/*31*/ b=GG(b,c,d,a,x[12],S24,0x8d2a4c8aL);/*32*/ /*Round3*/ a=HH(a,b,c,d,x[5],S31,0xfffa3942L);/*33*/ d=HH(d,a,b,c,x
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jsp的MD5加密 jsp MD5 加密