国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript實現的SHA-1加密算法完整實例

2019-11-20 10:38:05
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript實現的SHA-1加密算法。分享給大家供大家參考,具體如下:

/**** Secure Hash Algorithm (SHA1)* http://www.webtoolkit.info/***/function SHA1 (msg) {  function rotate_left(n,s) {    var t4 = ( n<<s ) | (n>>>(32-s));    return t4;  };  function lsb_hex(val) {    var str="";    var i;    var vh;    var vl;    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);    }    return str;  };  function cvt_hex(val) {    var str="";    var i;    var v;    for( i=7; i>=0; i-- ) {      v = (val>>>(i*4))&0x0f;      str += v.toString(16);    }    return str;  };  function Utf8Encode(string) {    string = string.replace(//r/n/g,"/n");    var utftext = "";    for (var n = 0; n < string.length; n++) {      var c = string.charCodeAt(n);      if (c < 128) {        utftext += String.fromCharCode(c);      }      else if((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);      }    }    return utftext;  };  var blockstart;  var i, j;  var W = new Array(80);  var H0 = 0x67452301;  var H1 = 0xEFCDAB89;  var H2 = 0x98BADCFE;  var H3 = 0x10325476;  var H4 = 0xC3D2E1F0;  var A, B, C, D, E;  var temp;  msg = Utf8Encode(msg);  var msg_len = msg.length;  var word_array = new Array();  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 ) {    case 0:      i = 0x080000000;    break;    case 1:      i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;    break;    case 2:      i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;    break;    case 3:      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;  }  var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);  return temp.toLowerCase();}

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript數據結構與算法技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贡山| 兴海县| 抚州市| 孟津县| 怀仁县| 中阳县| 南投县| 施甸县| 靖江市| 定远县| 清徐县| 兴海县| 安远县| 塘沽区| 肥乡县| 海兴县| 江津市| 遵化市| 雷山县| 孟连| 左贡县| 桐城市| 沂源县| 雷山县| 云南省| 西乌| 乐安县| 萝北县| 本溪市| 西乡县| 思茅市| 响水县| 荣昌县| 靖边县| 申扎县| 清苑县| 井陉县| 榆中县| 德阳市| 灵台县| 洛宁县|