4.验证md5秘法算法packageMD5;importjava.io.BufferedReader;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMD5_Demo{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};privatelong[]state=newlong[4];//state(ABCD)privatelong[]count=newlong[2];privatebyte[]buffer=newbyte[64];//inputbufferpublicStringdigestHexStr;privatebyte[]digest=newbyte[16];publicStringgetMD5ofStr(Stringinbuf){md5Init();md5Update(inbuf.getBytes(),inbuf.length());md5Final();digestHexStr=;for(inti=0;i16;i++){digestHexStr+=byteHEX(digest[i]);}returndigestHexStr;}publicMD5_Demo(){md5Init();return;}privatevoidmd5Init(){count[0]=0L;count[1]=0L;state[0]=0x67452301L;state[1]=0xefcdab89L;state[2]=0x98badcfeL;state[3]=0x10325476L;return;}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));}privatelongFF(longa,longb,longc,longd,longx,longs,longac){a+=F(b,c,d)+x+ac;a=((int)as)|((int)a(32-s));a+=b;returna;}privatelongGG(longa,longb,longc,longd,longx,longs,longac){a+=G(b,c,d)+x+ac;a=((int)as)|((int)a(32-s));a+=b;returna;}privatelongHH(longa,longb,longc,longd,longx,longs,longac){a+=H(b,c,d)+x+ac;a=((int)as)|((int)a(32-s));a+=b;returna;}privatelongII(longa,longb,longc,longd,longx,longs,longac){a+=I(b,c,d)+x+ac;a=((int)as)|((int)a(32-s));a+=b;returna;}privatevoidmd5Update(byte[]inbuf,intinputLen){inti,index,partLen;byte[]block=newbyte[64];index=(int)(count[0]3)&0x3F;if((count[0]+=(inputLen3))(inputLen3))count[1]++;count[1]+=(inputLen29);partLen=64-index;if(inputLen=partLen){md5Memcpy(buffer,inbuf,index,0,partLen);md5Transform(buffer);for(i=partLen;i+63inputLen;i+=64){md5Memcpy(block,inbuf,0,i,64);md5Transform(block);}index=0;}elsei=0;md5Memcpy(buffer,inbuf,index,i,inputLen-i);}privatevoidmd5Final(){byte[]bits=newbyte[8];intindex,padLen;Encode(bits,count,8);index=(int)(count[0]3)&0x3f;padLen=(index56)?(56-index):(120-index);md5Update(PADDING,padLen);md5Update(bits,8);Encode(digest,state,16);}privatevoidmd5Memcpy(byte[]output,byte[]input,intoutpos,intinpos,intlen){inti;for(i=0;ilen;i++)output[outpos+i]=input[inpos+i];}privatevoidmd5Transform(byteblock[]){longa=state[0],b=state[1],c=state[2],d=state[3];long[]x=newlong[16];Decode(x,block,64);a=FF(a,b,c,d,x[0],S11,0xd76aa478L);d=FF(d,a,b,c,x[1],S12,0xe8c7b756L);c=FF(c,d,a,b,x[2],S13,0x242070dbL);b=FF(b,c,d,a,x[3],S14,0xc1bdceeeL);a=FF(a,b,c,d,x[4],S11,0xf57c0fafL);d=FF(d,a,b,c,x[5],S12,0x4787c62aL);c=FF(c,d,a,b,x[6],S13,0xa8304613L);b=FF(b,c,d,a,x[7],S14,0xfd469501L);a=FF(a,b,c,d,x[8],S11,0x698098d8L);d=FF(d,a,b,c,x[9],S12,0x8b44f7afL);c=FF(c,d,a,b,x[10],S13,0xffff5bb1L);b=FF(b,c,d,a,x[11],S14,0x895cd7beL);a=FF(a,b,c,d,x[12],S11,0x6b901122L);d=FF(d,a,b,c,x[13],S12,0xfd987193L);c=FF(c,d,a,b,x[14],S13,0xa679438eL);b=FF(b,c,d,a,x[15],S14,0x49b40821L);a=GG(a,b,c,d,x[1],S21,0xf61e2562L);d=GG(d,a,b,c,x[6],S22,0xc040b340L);c=GG(c,d,a,b,x[11],S23,0x265e5a51L);b=GG(b,c,d,a,x[0],S24,0xe9b6c7aaL);a=GG(a,b,c,d,x[5],S21,0xd62f105dL);d=GG(d,a,b,c,x[10],S22,0x2441453L);c=GG(c,d,a,b,x[15],S23,0xd8a1e681L);b=GG(b,c,d,a,x[4],S24,0xe7d3fbc8L);a=GG(a,b,c,d,x[9],S21,0x21e1cde6L);d=GG(d,a,b,c,x[14],S22,0xc33707d6L);c=GG(c,d,a,b,x[3],S23,0xf4d50d87L);b=GG(b,c,d,a,x[8],S24,0x455a14edL);a=GG(a,b,c,d,x[13],S21,0xa9e3e905L);d=GG(d,a,b,c,x[2],S22,0xfcefa3f8L);c=GG(c,d,a,b,x[7],S23,0x676f02d9L);b=GG(b,c,d,a,x[12],S24,0x8d2a4c8aL);a=HH(a,b,c,d,x[5],S31,0xfffa3942L);d=HH(d,a,b,c,x[8],S32,0x8771f681L);c=HH(c,d,a,b,x[11],S33,0x6d9d6122L);b=HH(b,c,d,a,x[14],S34,0xfde5380cL);a=HH(a,b,c,d,x[1],S31,0xa4beea44L);d=HH(d,a,b,c,x[4],S32,0x4bdecfa9L);c=HH(c,d,a,b,x[7],S33,0xf6bb4b60L);b=HH(b,c,d,a,x[10],S34,0xbebfbc70L);a=HH(a,b,c,d,x[13],S31,0x289b7ec6L);d=HH(d,a,b,c,x[0],S32,0xeaa127faL);c=HH(c,d,a,b,x[3],S33,0xd4ef3085L);b=HH(b,c,d,a,x[6],S34,0x4881d05L);a=HH(a,b,c,d,x[9],S31,0xd9d4d039L);d=HH(d,a,b,c,x[12],S32,0xe6db99e5L);c=HH(c,d,a,b,x[15],S33,0x1fa27cf8L);b=HH(b,c,d,a,x[2],S34,0xc4ac5665L);a=II(a,b,c,d,x[0],S41,0xf4292244L);d=II(d,a,b,c,x[7],S42,0x432aff97L);c=II(c,d,a,b,x[14],S43,0xab9423a7L);b=II(b,c,d,a,x[5],S44,0xfc93a039L);a=II(a,b,c,d,x[12],S41,0x655b59c3L);d=II(d,a,b,c,x[3],S42,0x8f0ccc92L);c=II(c,d,a,b,x[10],S43,0xffeff47dL);b=II(b,c,d,a,x[1],S44,0x85845dd1L);a=II(a,b,c,d,x[8],S41,0x6fa87e4fL);d=II(d,a,b,c,x[15],S42,0xfe2ce6e0L);c=II(c,d,a,b,x[6],S43,0xa3014314L);b=II(b,c,d,a,x[13],S44,0x4e0811a1L);a=II(a,b,c,d,x[4],S41,0xf7537e82L);d=II(d,a,b,c,x[11],S42,0xbd3af235L);c=II(c,d,a,b,x