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程序设计有所帮助。