分享JavaScript与Java中MD5使用两个例子
在网上查了一下,在网上收集了Java与JavaScript中使用的两个例子,试验过,分享下。
1、Java:
packageorg.bearfly.test.md5;
importjava.io.UnsupportedEncodingException;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
publicclassMD5Utils{
publicstaticvoidmain(String[]args){
System.out.println(getMd5String(""));
System.out.println(MD5("good"));
}
publicfinalstaticStringMD5(Strings){
charhexDigits[]={'0','1','2','3','4',
'5','6','7','8','9',
'A','B','C','D','E','F'};
try{
byte[]btInput=s.getBytes();
//获得MD5摘要算法的MessageDigest对象
MessageDigestmdInst=MessageDigest.getInstance("MD5");
//使用指定的字节更新摘要
mdInst.update(btInput);
//获得密文
byte[]md=mdInst.digest();
//把密文转换成十六进制的字符串形式
intj=md.length;
charstr[]=newchar[j*2];
intk=0;
for(inti=0;i<j;i++){
bytebyte0=md[i];
str[k++]=hexDigits[byte0>>>4&0xf];
str[k++]=hexDigits[byte0&0xf];
}
returnnewString(str);
}
catch(Exceptione){
e.printStackTrace();
returnnull;
}
}
publicstaticStringgetMd5String(Stringstr){
MessageDigestmessageDigest=null;
try{
messageDigest=MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
}catch(NoSuchAlgorithmExceptione){
System.out.println("NoSuchAlgorithmExceptioncaught!");
System.exit(-1);
}catch(UnsupportedEncodingExceptione){
e.printStackTrace();
}
byte[]byteArray=messageDigest.digest();
StringBuffermd5StrBuff=newStringBuffer();
for(inti=0;i<byteArray.length;i++){
if(Integer.toHexString(0xFF&byteArray[i]).length()==1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF&byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF&byteArray[i]));
}
returnmd5StrBuff.toString();
}
}
2、JavaScript:
md5.js
varhexcase=0;/*hexoutputformat.0-lowercase;1-uppercase*/
varb64pad="";/*base-64padcharacter."="forstrictRFCcompliance*/
varchrsz=8;/*bitsperinputcharacter.8-ASCII;16-Unicode*/
/*
*Thesearethefunctionsyou'llusuallywanttocall
*Theytakestringargumentsandreturneitherhexorbase-64encodedstrings
*/
functionhex_md5(s){returnbinl2hex(core_md5(str2binl(s),s.length*chrsz));}
functionb64_md5(s){returnbinl2b64(core_md5(str2binl(s),s.length*chrsz));}
functionstr_md5(s){returnbinl2str(core_md5(str2binl(s),s.length*chrsz));}
functionhex_hmac_md5(key,data){returnbinl2hex(core_hmac_md5(key,data));}
functionb64_hmac_md5(key,data){returnbinl2b64(core_hmac_md5(key,data));}
functionstr_hmac_md5(key,data){returnbinl2str(core_hmac_md5(key,data));}
/*
*Performasimpleself-testtoseeiftheVMisworking
*/
functionmd5_vm_test()
{
returnhex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72";
}
/*
*CalculatetheMD5ofanarrayoflittle-endianwords,andabitlength
*/
functioncore_md5(x,len)
{
/*appendpadding*/
x[len>>5]|=0x80<<((len)%32);
x[(((len+64)>>>9)<<4)+14]=len;
vara=1732584193;
varb=-271733879;
varc=-1732584194;
vard=271733878;
for(vari=0;i<x.length;i+=16)
{
varolda=a;
varoldb=b;
varoldc=c;
varoldd=d;
a=md5_ff(a,b,c,d,x[i+0],7,-680876936);
d=md5_ff(d,a,b,c,x[i+1],12,-389564586);
c=md5_ff(c,d,a,b,x[i+2],17,606105819);
b=md5_ff(b,c,d,a,x[i+3],22,-1044525330);
a=md5_ff(a,b,c,d,x[i+4],7,-176418897);
d=md5_ff(d,a,b,c,x[i+5],12,1200080426);
c=md5_ff(c,d,a,b,x[i+6],17,-1473231341);
b=md5_ff(b,c,d,a,x[i+7],22,-45705983);
a=md5_ff(a,b,c,d,x[i+8],7,1770035416);
d=md5_ff(d,a,b,c,x[i+9],12,-1958414417);
c=md5_ff(c,d,a,b,x[i+10],17,-42063);
b=md5_ff(b,c,d,a,x[i+11],22,-1990404162);
a=md5_ff(a,b,c,d,x[i+12],7,1804603682);
d=md5_ff(d,a,b,c,x[i+13],12,-40341101);
c=md5_ff(c,d,a,b,x[i+14],17,-1502002290);
b=md5_ff(b,c,d,a,x[i+15],22,1236535329);
a=md5_gg(a,b,c,d,x[i+1],5,-165796510);
d=md5_gg(d,a,b,c,x[i+6],9,-1069501632);
c=md5_gg(c,d,a,b,x[i+11],14,643717713);
b=md5_gg(b,c,d,a,x[i+0],20,-373897302);
a=md5_gg(a,b,c,d,x[i+5],5,-701558691);
d=md5_gg(d,a,b,c,x[i+10],9,38016083);
c=md5_gg(c,d,a,b,x[i+15],14,-660478335);
b=md5_gg(b,c,d,a,x[i+4],20,-405537848);
a=md5_gg(a,b,c,d,x[i+9],5,568446438);
d=md5_gg(d,a,b,c,x[i+14],9,-1019803690);
c=md5_gg(c,d,a,b,x[i+3],14,-187363961);
b=md5_gg(b,c,d,a,x[i+8],20,1163531501);
a=md5_gg(a,b,c,d,x[i+13],5,-1444681467);
d=md5_gg(d,a,b,c,x[i+2],9,-51403784);
c=md5_gg(c,d,a,b,x[i+7],14,1735328473);
b=md5_gg(b,c,d,a,x[i+12],20,-1926607734);
a=md5_hh(a,b,c,d,x[i+5],4,-378558);
d=md5_hh(d,a,b,c,x[i+8],11,-2022574463);
c=md5_hh(c,d,a,b,x[i+11],16,1839030562);
b=md5_hh(b,c,d,a,x[i+14],23,-35309556);
a=md5_hh(a,b,c,d,x[i+1],4,-1530992060);
d=md5_hh(d,a,b,c,x[i+4],11,1272893353);
c=md5_hh(c,d,a,b,x[i+7],16,-155497632);
b=md5_hh(b,c,d,a,x[i+10],23,-1094730640);
a=md5_hh(a,b,c,d,x[i+13],4,681279174);
d=md5_hh(d,a,b,c,x[i+0],11,-358537222);
c=md5_hh(c,d,a,b,x[i+3],16,-722521979);
b=md5_hh(b,c,d,a,x[i+6],23,76029189);
a=md5_hh(a,b,c,d,x[i+9],4,-640364487);
d=md5_hh(d,a,b,c,x[i+12],11,-421815835);
c=md5_hh(c,d,a,b,x[i+15],16,530742520);
b=md5_hh(b,c,d,a,x[i+2],23,-995338651);
a=md5_ii(a,b,c,d,x[i+0],6,-198630844);
d=md5_ii(d,a,b,c,x[i+7],10,1126891415);
c=md5_ii(c,d,a,b,x[i+14],15,-1416354905);
b=md5_ii(b,c,d,a,x[i+5],21,-57434055);
a=md5_ii(a,b,c,d,x[i+12],6,1700485571);
d=md5_ii(d,a,b,c,x[i+3],10,-1894986606);
c=md5_ii(c,d,a,b,x[i+10],15,-1051523);
b=md5_ii(b,c,d,a,x[i+1],21,-2054922799);
a=md5_ii(a,b,c,d,x[i+8],6,1873313359);
d=md5_ii(d,a,b,c,x[i+15],10,-30611744);
c=md5_ii(c,d,a,b,x[i+6],15,-1560198380);
b=md5_ii(b,c,d,a,x[i+13],21,1309151649);
a=md5_ii(a,b,c,d,x[i+4],6,-145523070);
d=md5_ii(d,a,b,c,x[i+11],10,-1120210379);
c=md5_ii(c,d,a,b,x[i+2],15,718787259);
b=md5_ii(b,c,d,a,x[i+9],21,-343485551);
a=safe_add(a,olda);
b=safe_add(b,oldb);
c=safe_add(c,oldc);
d=safe_add(d,oldd);
}
returnArray(a,b,c,d);
}
/*
*Thesefunctionsimplementthefourbasicoperationsthealgorithmuses.
*/
functionmd5_cmn(q,a,b,x,s,t)
{
returnsafe_add(bit_rol(safe_add(safe_add(a,q),safe_add(x,t)),s),b);
}
functionmd5_ff(a,b,c,d,x,s,t)
{
returnmd5_cmn((b&c)|((~b)&d),a,b,x,s,t);
}
functionmd5_gg(a,b,c,d,x,s,t)
{
returnmd5_cmn((b&d)|(c&(~d)),a,b,x,s,t);
}
functionmd5_hh(a,b,c,d,x,s,t)
{
returnmd5_cmn(b^c^d,a,b,x,s,t);
}
functionmd5_ii(a,b,c,d,x,s,t)
{
returnmd5_cmn(c^(b|(~d)),a,b,x,s,t);
}
/*
*CalculatetheHMAC-MD5,ofakeyandsomedata
*/
functioncore_hmac_md5(key,data)
{
varbkey=str2binl(key);
if(bkey.length>16)bkey=core_md5(bkey,key.length*chrsz);
varipad=Array(16),opad=Array(16);
for(vari=0;i<16;i++)
{
ipad[i]=bkey[i]^0x36363636;
opad[i]=bkey[i]^0x5C5C5C5C;
}
varhash=core_md5(ipad.concat(str2binl(data)),512+data.length*chrsz);
returncore_md5(opad.concat(hash),512+128);
}
/*
*Addintegers,wrappingat2^32.Thisuses16-bitoperationsinternally
*toworkaroundbugsinsomeJSinterpreters.
*/
functionsafe_add(x,y)
{
varlsw=(x&0xFFFF)+(y&0xFFFF);
varmsw=(x>>16)+(y>>16)+(lsw>>16);
return(msw<<16)|(lsw&0xFFFF);
}
/*
*Bitwiserotatea32-bitnumbertotheleft.
*/
functionbit_rol(num,cnt)
{
return(num<<cnt)|(num>>>(32-cnt));
}
/*
*Convertastringtoanarrayoflittle-endianwords
*IfchrszisASCII,characters>255havetheirhi-bytesilentlyignored.
*/
functionstr2binl(str)
{
varbin=Array();
varmask=(1<<chrsz)-1;
for(vari=0;i<str.length*chrsz;i+=chrsz)
bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(i%32);
returnbin;
}
/*
*Convertanarrayoflittle-endianwordstoastring
*/
functionbinl2str(bin)
{
varstr="";
varmask=(1<<chrsz)-1;
for(vari=0;i<bin.length*32;i+=chrsz)
str+=String.fromCharCode((bin[i>>5]>>>(i%32))&mask);
returnstr;
}
/*
*Convertanarrayoflittle-endianwordstoahexstring.
*/
functionbinl2hex(binarray)
{
varhex_tab=hexcase?"0123456789ABCDEF":"0123456789abcdef";
varstr="";
for(vari=0;i<binarray.length*4;i++)
{
str+=hex_tab.charAt((binarray[i>>2]>>((i%4)*8+4))&0xF)+
hex_tab.charAt((binarray[i>>2]>>((i%4)*8))&0xF);
}
returnstr;
}
/*
*Convertanarrayoflittle-endianwordstoabase-64string
*/
functionbinl2b64(binarray)
{
vartab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
varstr="";
for(vari=0;i<binarray.length*4;i+=3)
{
vartriplet=(((binarray[i>>2]>>8*(i%4))&0xFF)<<16)
|(((binarray[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)
|((binarray[i+2>>2]>>8*((i+2)%4))&0xFF);
for(varj=0;j<4;j++)
{
if(i*8+j*6>binarray.length*32)str+=b64pad;
elsestr+=tab.charAt((triplet>>6*(3-j))&0x3F);
}
}
returnstr;
}
md5.html
<html>
<head>
<title>md5_Test</title>
<scripttype="text/javascript"src="md5.js"></script>
<linkrel="stylesheet"type="text/css"href="bearfly.css"/>
</head>
<body>
<scripttype="text/javascript">
document.write("myPasswordMD5:",hex_md5("md5Test").toUpperCase());
</script>
</body>
</html>
补充:javascript的MD5代码备份,跟java互通
varMD5=function(string){
functionRotateLeft(lValue,iShiftBits){
return(lValue<<iShiftBits)|(lValue>>>(32-iShiftBits));
}
functionAddUnsigned(lX,lY){
varlX4,lY4,lX8,lY8,lResult;
lX8=(lX&0x80000000);
lY8=(lY&0x80000000);
lX4=(lX&0x40000000);
lY4=(lY&0x40000000);
lResult=(lX&0x3FFFFFFF)+(lY&0x3FFFFFFF);
if(lX4&lY4){
return(lResult^0x80000000^lX8^lY8);
}
if(lX4|lY4){
if(lResult&0x40000000){
return(lResult^0xC0000000^lX8^lY8);
}else{
return(lResult^0x40000000^lX8^lY8);
}
}else{
return(lResult^lX8^lY8);
}
}
functionF(x,y,z){return(x&y)|((~x)&z);}
functionG(x,y,z){return(x&z)|(y&(~z));}
functionH(x,y,z){return(x^y^z);}
functionI(x,y,z){return(y^(x|(~z)));}
functionFF(a,b,c,d,x,s,ac){
a=AddUnsigned(a,AddUnsigned(AddUnsigned(F(b,c,d),x),ac));
returnAddUnsigned(RotateLeft(a,s),b);
};
functionGG(a,b,c,d,x,s,ac){
a=AddUnsigned(a,AddUnsigned(AddUnsigned(G(b,c,d),x),ac));
returnAddUnsigned(RotateLeft(a,s),b);
};
functionHH(a,b,c,d,x,s,ac){
a=AddUnsigned(a,AddUnsigned(AddUnsigned(H(b,c,d),x),ac));
returnAddUnsigned(RotateLeft(a,s),b);
};
functionII(a,b,c,d,x,s,ac){
a=AddUnsigned(a,AddUnsigned(AddUnsigned(I(b,c,d),x),ac));
returnAddUnsigned(RotateLeft(a,s),b);
};
functionConvertToWordArray(string){
varlWordCount;
varlMessageLength=string.length;
varlNumberOfWords_temp1=lMessageLength+8;
varlNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1%64))/64;
varlNumberOfWords=(lNumberOfWords_temp2+1)*16;
varlWordArray=Array(lNumberOfWords-1);
varlBytePosition=0;
varlByteCount=0;
while(lByteCount<lMessageLength){
lWordCount=(lByteCount-(lByteCount%4))/4;
lBytePosition=(lByteCount%4)*8;
lWordArray[lWordCount]=(lWordArray[lWordCount]|(string.charCodeAt(lByteCount)<<lBytePosition));
lByteCount++;
}
lWordCount=(lByteCount-(lByteCount%4))/4;
lBytePosition=(lByteCount%4)*8;
lWordArray[lWordCount]=lWordArray[lWordCount]|(0x80<<lBytePosition);
lWordArray[lNumberOfWords-2]=lMessageLength<<3;
lWordArray[lNumberOfWords-1]=lMessageLength>>>29;
returnlWordArray;
};
functionWordToHex(lValue){
varWordToHexValue="",WordToHexValue_temp="",lByte,lCount;
for(lCount=0;lCount<=3;lCount++){
lByte=(lValue>>>(lCount*8))&255;
WordToHexValue_temp="0"+lByte.toString(16);
WordToHexValue=WordToHexValue+WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
}
returnWordToHexValue;
};
functionUtf8Encode(string){
string=string.replace(/\r\n/g,"\n");
varutftext="";
for(varn=0;n<string.length;n++){
varc=string.charCodeAt(n);
if(c<128){
utftext+=String.fromCharCode(c);
}
elseif((c>127)&&(c<2048)){
utftext+=String.fromCharCode((c>>6)|192);
utftext+=String.fromCharCode((c&63)|128);
}
else{
utftext+=String.fromCharCode((c>>12)|224);
utftext+=String.fromCharCode(((c>>6)&63)|128);
utftext+=String.fromCharCode((c&63)|128);
}
}
returnutftext;
};
varx=Array();
vark,AA,BB,CC,DD,a,b,c,d;
varS11=7,S12=12,S13=17,S14=22;
varS21=5,S22=9,S23=14,S24=20;
varS31=4,S32=11,S33=16,S34=23;
varS41=6,S42=10,S43=15,S44=21;
string=Utf8Encode(string);
x=ConvertToWordArray(string);
a=0x67452301;b=0xEFCDAB89;c=0x98BADCFE;d=0x10325476;
for(k=0;k<x.length;k+=16){
AA=a;BB=b;CC=c;DD=d;
a=FF(a,b,c,d,x[k+0],S11,0xD76AA478);
d=FF(d,a,b,c,x[k+1],S12,0xE8C7B756);
c=FF(c,d,a,b,x[k+2],S13,0x242070DB);
b=FF(b,c,d,a,x[k+3],S14,0xC1BDCEEE);
a=FF(a,b,c,d,x[k+4],S11,0xF57C0FAF);
d=FF(d,a,b,c,x[k+5],S12,0x4787C62A);
c=FF(c,d,a,b,x[k+6],S13,0xA8304613);
b=FF(b,c,d,a,x[k+7],S14,0xFD469501);
a=FF(a,b,c,d,x[k+8],S11,0x698098D8);
d=FF(d,a,b,c,x[k+9],S12,0x8B44F7AF);
c=FF(c,d,a,b,x[k+10],S13,0xFFFF5BB1);
b=FF(b,c,d,a,x[k+11],S14,0x895CD7BE);
a=FF(a,b,c,d,x[k+12],S11,0x6B901122);
d=FF(d,a,b,c,x[k+13],S12,0xFD987193);
c=FF(c,d,a,b,x[k+14],S13,0xA679438E);
b=FF(b,c,d,a,x[k+15],S14,0x49B40821);
a=GG(a,b,c,d,x[k+1],S21,0xF61E2562);
d=GG(d,a,b,c,x[k+6],S22,0xC040B340);
c=GG(c,d,a,b,x[k+11],S23,0x265E5A51);
b=GG(b,c,d,a,x[k+0],S24,0xE9B6C7AA);
a=GG(a,b,c,d,x[k+5],S21,0xD62F105D);
d=GG(d,a,b,c,x[k+10],S22,0x2441453);
c=GG(c,d,a,b,x[k+15],S23,0xD8A1E681);
b=GG(b,c,d,a,x[k+4],S24,0xE7D3FBC8);
a=GG(a,b,c,d,x[k+9],S21,0x21E1CDE6);
d=GG(d,a,b,c,x[k+14],S22,0xC33707D6);
c=GG(c,d,a,b,x[k+3],S23,0xF4D50D87);
b=GG(b,c,d,a,x[k+8],S24,0x455A14ED);
a=GG(a,b,c,d,x[k+13],S21,0xA9E3E905);
d=GG(d,a,b,c,x[k+2],S22,0xFCEFA3F8);
c=GG(c,d,a,b,x[k+7],S23,0x676F02D9);
b=GG(b,c,d,a,x[k+12],S24,0x8D2A4C8A);
a=HH(a,b,c,d,x[k+5],S31,0xFFFA3942);
d=HH(d,a,b,c,x[k+8],S32,0x8771F681);
c=HH(c,d,a,b,x[k+11],S33,0x6D9D6122);
b=HH(b,c,d,a,x[k+14],S34,0xFDE5380C);
a=HH(a,b,c,d,x[k+1],S31,0xA4BEEA44);
d=HH(d,a,b,c,x[k+4],S32,0x4BDECFA9);
c=HH(c,d,a,b,x[k+7],S33,0xF6BB4B60);
b=HH(b,c,d,a,x[k+10],S34,0xBEBFBC70);
a=HH(a,b,c,d,x[k+13],S31,0x289B7EC6);
d=HH(d,a,b,c,x[k+0],S32,0xEAA127FA);
c=HH(c,d,a,b,x[k+3],S33,0xD4EF3085);
b=HH(b,c,d,a,x[k+6],S34,0x4881D05);
a=HH(a,b,c,d,x[k+9],S31,0xD9D4D039);
d=HH(d,a,b,c,x[k+12],S32,0xE6DB99E5);
c=HH(c,d,a,b,x[k+15],S33,0x1FA27CF8);
b=HH(b,c,d,a,x[k+2],S34,0xC4AC5665);
a=II(a,b,c,d,x[k+0],S41,0xF4292244);
d=II(d,a,b,c,x[k+7],S42,0x432AFF97);
c=II(c,d,a,b,x[k+14],S43,0xAB9423A7);
b=II(b,c,d,a,x[k+5],S44,0xFC93A039);
a=II(a,b,c,d,x[k+12],S41,0x655B59C3);
d=II(d,a,b,c,x[k+3],S42,0x8F0CCC92);
c=II(c,d,a,b,x[k+10],S43,0xFFEFF47D);
b=II(b,c,d,a,x[k+1],S44,0x85845DD1);
a=II(a,b,c,d,x[k+8],S41,0x6FA87E4F);
d=II(d,a,b,c,x[k+15],S42,0xFE2CE6E0);
c=II(c,d,a,b,x[k+6],S43,0xA3014314);
b=II(b,c,d,a,x[k+13],S44,0x4E0811A1);
a=II(a,b,c,d,x[k+4],S41,0xF7537E82);
d=II(d,a,b,c,x[k+11],S42,0xBD3AF235);
c=II(c,d,a,b,x[k+2],S43,0x2AD7D2BB);
b=II(b,c,d,a,x[k+9],S44,0xEB86D391);
a=AddUnsigned(a,AA);
b=AddUnsigned(b,BB);
c=AddUnsigned(c,CC);
d=AddUnsigned(d,DD);
}
vartemp=WordToHex(a)+WordToHex(b)+WordToHex(c)+WordToHex(d);
returntemp.toLowerCase();
}
以上就是本文的全部内容,java、javascript、MD5三者之间的关系,使用,希望对大家的学习有所帮助。