?? md5.js
字號:
dojo.require("dojo.crypto");dojo.provide("dojo.crypto.MD5");/* Return to a port of Paul Johnstone's MD5 implementation * http://pajhome.org.uk/crypt/md5/index.html * * Copyright (C) Paul Johnston 1999 - 2002. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * * Dojo port by Tom Trenka * * 2005-12-7 * All conversions are internalized (no dependencies) * implemented getHMAC for message digest auth. */dojo.crypto.MD5 = new function(){ var chrsz=8; var mask=(1<<chrsz)-1; function toWord(s) { var wa=[]; for(var i=0; i<s.length*chrsz; i+=chrsz) wa[i>>5]|=(s.charCodeAt(i/chrsz)&mask)<<(i%32); return wa; } function toString(wa){ var s=[]; for(var i=0; i<wa.length*32; i+=chrsz) s.push(String.fromCharCode((wa[i>>5]>>>(i%32))&mask)); return s.join(""); } function toHex(wa) { var h="0123456789abcdef"; var s=[]; for(var i=0; i<wa.length*4; i++){ s.push(h.charAt((wa[i>>2]>>((i%4)*8+4))&0xF)+h.charAt((wa[i>>2]>>((i%4)*8))&0xF)); } return s.join(""); } function toBase64(wa){ var p="="; var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; var s=[]; for(var i=0; i<wa.length*4; i+=3){ var t=(((wa[i>>2]>>8*(i%4))&0xFF)<<16)|(((wa[i+1>>2]>>8*((i+1)%4))&0xFF)<<8)|((wa[i+2>>2]>>8*((i+2)%4))&0xFF); for(var j=0; j<4; j++){ if(i*8+j*6>wa.length*32) s.push(p); else s.push(tab.charAt((t>>6*(3-j))&0x3F)); } } return s.join(""); } function add(x,y) { var l=(x&0xFFFF)+(y&0xFFFF); var m=(x>>16)+(y>>16)+(l>>16); return (m<<16)|(l&0xFFFF); } function R(n,c){ return (n<<c)|(n>>>(32-c)); } function C(q,a,b,x,s,t){ return add(R(add(add(a,q),add(x,t)),s),b); } function FF(a,b,c,d,x,s,t){ return C((b&c)|((~b)&d),a,b,x,s,t); } function GG(a,b,c,d,x,s,t){ return C((b&d)|(c&(~d)),a,b,x,s,t); } function HH(a,b,c,d,x,s,t){ return C(b^c^d,a,b,x,s,t); } function II(a,b,c,d,x,s,t){ return C(c^(b|(~d)),a,b,x,s,t); } function core(x,len){ x[len>>5]|=0x80<<((len)%32); x[(((len+64)>>>9)<<4)+14]=len; var a= 1732584193; var b=-271733879; var c=-1732584194; var d= 271733878; for(var i=0; i<x.length; i+=16){ var olda=a; var oldb=b; var oldc=c; var oldd=d; a=FF(a,b,c,d,x[i+ 0],7 ,-680876936); d=FF(d,a,b,c,x[i+ 1],12,-389564586); c=FF(c,d,a,b,x[i+ 2],17, 606105819); b=FF(b,c,d,a,x[i+ 3],22,-1044525330); a=FF(a,b,c,d,x[i+ 4],7 ,-176418897); d=FF(d,a,b,c,x[i+ 5],12, 1200080426); c=FF(c,d,a,b,x[i+ 6],17,-1473231341); b=FF(b,c,d,a,x[i+ 7],22,-45705983); a=FF(a,b,c,d,x[i+ 8],7 , 1770035416); d=FF(d,a,b,c,x[i+ 9],12,-1958414417); c=FF(c,d,a,b,x[i+10],17,-42063); b=FF(b,c,d,a,x[i+11],22,-1990404162); a=FF(a,b,c,d,x[i+12],7 , 1804603682); d=FF(d,a,b,c,x[i+13],12,-40341101); c=FF(c,d,a,b,x[i+14],17,-1502002290); b=FF(b,c,d,a,x[i+15],22, 1236535329); a=GG(a,b,c,d,x[i+ 1],5 ,-165796510); d=GG(d,a,b,c,x[i+ 6],9 ,-1069501632); c=GG(c,d,a,b,x[i+11],14, 643717713); b=GG(b,c,d,a,x[i+ 0],20,-373897302); a=GG(a,b,c,d,x[i+ 5],5 ,-701558691); d=GG(d,a,b,c,x[i+10],9 , 38016083); c=GG(c,d,a,b,x[i+15],14,-660478335); b=GG(b,c,d,a,x[i+ 4],20,-405537848); a=GG(a,b,c,d,x[i+ 9],5 , 568446438); d=GG(d,a,b,c,x[i+14],9 ,-1019803690); c=GG(c,d,a,b,x[i+ 3],14,-187363961); b=GG(b,c,d,a,x[i+ 8],20, 1163531501); a=GG(a,b,c,d,x[i+13],5 ,-1444681467); d=GG(d,a,b,c,x[i+ 2],9 ,-51403784); c=GG(c,d,a,b,x[i+ 7],14, 1735328473); b=GG(b,c,d,a,x[i+12],20,-1926607734); a=HH(a,b,c,d,x[i+ 5],4 ,-378558); d=HH(d,a,b,c,x[i+ 8],11,-2022574463); c=HH(c,d,a,b,x[i+11],16, 1839030562); b=HH(b,c,d,a,x[i+14],23,-35309556); a=HH(a,b,c,d,x[i+ 1],4 ,-1530992060); d=HH(d,a,b,c,x[i+ 4],11, 1272893353); c=HH(c,d,a,b,x[i+ 7],16,-155497632); b=HH(b,c,d,a,x[i+10],23,-1094730640); a=HH(a,b,c,d,x[i+13],4 , 681279174); d=HH(d,a,b,c,x[i+ 0],11,-358537222); c=HH(c,d,a,b,x[i+ 3],16,-722521979); b=HH(b,c,d,a,x[i+ 6],23, 76029189); a=HH(a,b,c,d,x[i+ 9],4 ,-640364487); d=HH(d,a,b,c,x[i+12],11,-421815835); c=HH(c,d,a,b,x[i+15],16, 530742520); b=HH(b,c,d,a,x[i+ 2],23,-995338651); a=II(a,b,c,d,x[i+ 0],6 ,-198630844); d=II(d,a,b,c,x[i+ 7],10, 1126891415); c=II(c,d,a,b,x[i+14],15,-1416354905); b=II(b,c,d,a,x[i+ 5],21,-57434055); a=II(a,b,c,d,x[i+12],6 , 1700485571); d=II(d,a,b,c,x[i+ 3],10,-1894986606); c=II(c,d,a,b,x[i+10],15,-1051523); b=II(b,c,d,a,x[i+ 1],21,-2054922799); a=II(a,b,c,d,x[i+ 8],6 , 1873313359); d=II(d,a,b,c,x[i+15],10,-30611744); c=II(c,d,a,b,x[i+ 6],15,-1560198380); b=II(b,c,d,a,x[i+13],21, 1309151649); a=II(a,b,c,d,x[i+ 4],6 ,-145523070); d=II(d,a,b,c,x[i+11],10,-1120210379); c=II(c,d,a,b,x[i+ 2],15, 718787259); b=II(b,c,d,a,x[i+ 9],21,-343485551); a = add(a,olda); b = add(b,oldb); c = add(c,oldc); d = add(d,oldd); } return [a,b,c,d]; } function hmac(data,key){ var wa=toWord(key); if(wa.length>16) wa=core(wa,key.length*chrsz); var l=[], r=[]; for(var i=0; i<16; i++){ l[i]=wa[i]^0x36363636; r[i]=wa[i]^0x5c5c5c5c; } var h=core(l.concat(toWord(data)),512+data.length*chrsz); return core(r.concat(h),640); } // Public functions this.compute=function(data,outputType){ var out=outputType||dojo.crypto.outputTypes.Base64; switch(out){ case dojo.crypto.outputTypes.Hex:{ return toHex(core(toWord(data),data.length*chrsz)); } case dojo.crypto.outputTypes.String:{ return toString(core(toWord(data),data.length*chrsz)); } default:{ return toBase64(core(toWord(data),data.length*chrsz)); } } }; this.getHMAC=function(data,key,outputType){ var out=outputType||dojo.crypto.outputTypes.Base64; switch(out){ case dojo.crypto.outputTypes.Hex:{ return toHex(hmac(data,key)); } case dojo.crypto.outputTypes.String:{ return toString(hmac(data,key)); } default:{ return toBase64(hmac(data,key)); } } };}();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -