JavaScript实现的SHA-1加密算法完整实例
本文实例讲述了JavaScript实现的SHA-1加密算法。分享给大家供大家参考,具体如下:
/** * *SecureHashAlgorithm(SHA1) *http://www.webtoolkit.info/ * **/ functionSHA1(msg){ functionrotate_left(n,s){ vart4=(n<<s)|(n>>>(32-s)); returnt4; }; functionlsb_hex(val){ varstr=""; vari; varvh; varvl; for(i=0;i<=6;i+=2){ vh=(val>>>(i*4+4))&0x0f; vl=(val>>>(i*4))&0x0f; str+=vh.toString(16)+vl.toString(16); } returnstr; }; functioncvt_hex(val){ varstr=""; vari; varv; for(i=7;i>=0;i--){ v=(val>>>(i*4))&0x0f; str+=v.toString(16); } returnstr; }; 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; }; varblockstart; vari,j; varW=newArray(80); varH0=0x67452301; varH1=0xEFCDAB89; varH2=0x98BADCFE; varH3=0x10325476; varH4=0xC3D2E1F0; varA,B,C,D,E; vartemp; msg=Utf8Encode(msg); varmsg_len=msg.length; varword_array=newArray(); for(i=0;i<msg_len-3;i+=4){ j=msg.charCodeAt(i)<<24|msg.charCodeAt(i+1)<<16| msg.charCodeAt(i+2)<<8|msg.charCodeAt(i+3); word_array.push(j); } switch(msg_len%4){ case0: i=0x080000000; break; case1: i=msg.charCodeAt(msg_len-1)<<24|0x0800000; break; case2: i=msg.charCodeAt(msg_len-2)<<24|msg.charCodeAt(msg_len-1)<<16|0x08000; break; case3: i=msg.charCodeAt(msg_len-3)<<24|msg.charCodeAt(msg_len-2)<<16|msg.charCodeAt(msg_len-1)<<8|0x80; break; } word_array.push(i); while((word_array.length%16)!=14)word_array.push(0); word_array.push(msg_len>>>29); word_array.push((msg_len<<3)&0x0ffffffff); for(blockstart=0;blockstart<word_array.length;blockstart+=16){ for(i=0;i<16;i++)W[i]=word_array[blockstart+i]; for(i=16;i<=79;i++)W[i]=rotate_left(W[i-3]^W[i-8]^W[i-14]^W[i-16],1); A=H0; B=H1; C=H2; D=H3; E=H4; for(i=0;i<=19;i++){ temp=(rotate_left(A,5)+((B&C)|(~B&D))+E+W[i]+0x5A827999)&0x0ffffffff; E=D; D=C; C=rotate_left(B,30); B=A; A=temp; } for(i=20;i<=39;i++){ temp=(rotate_left(A,5)+(B^C^D)+E+W[i]+0x6ED9EBA1)&0x0ffffffff; E=D; D=C; C=rotate_left(B,30); B=A; A=temp; } for(i=40;i<=59;i++){ temp=(rotate_left(A,5)+((B&C)|(B&D)|(C&D))+E+W[i]+0x8F1BBCDC)&0x0ffffffff; E=D; D=C; C=rotate_left(B,30); B=A; A=temp; } for(i=60;i<=79;i++){ temp=(rotate_left(A,5)+(B^C^D)+E+W[i]+0xCA62C1D6)&0x0ffffffff; E=D; D=C; C=rotate_left(B,30); B=A; A=temp; } H0=(H0+A)&0x0ffffffff; H1=(H1+B)&0x0ffffffff; H2=(H2+C)&0x0ffffffff; H3=(H3+D)&0x0ffffffff; H4=(H4+E)&0x0ffffffff; } vartemp=cvt_hex(H0)+cvt_hex(H1)+cvt_hex(H2)+cvt_hex(H3)+cvt_hex(H4); returntemp.toLowerCase(); }
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数据结构与算法技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。