[JavaScript] JavaScript实现的SHA-1算法 →→→→→进入此内容的聊天室

来自 , 2019-07-30, 写在 JavaScript, 查看 108 次.
URL http://www.code666.cn/view/e0f48a10
  1. /**
  2. *
  3. *  Secure Hash Algorithm (SHA1)
  4. *  http://www.webtoolkit.info/
  5. *
  6. **/
  7.  
  8. function SHA1 (msg) {
  9.  
  10.         function rotate_left(n,s) {
  11.                 var t4 = ( n<<s ) | (n>>>(32-s));
  12.                 return t4;
  13.         };
  14.  
  15.         function lsb_hex(val) {
  16.                 var str="";
  17.                 var i;
  18.                 var vh;
  19.                 var vl;
  20.  
  21.                 for( i=0; i<=6; i+=2 ) {
  22.                         vh = (val>>>(i*4+4))&0x0f;
  23.                         vl = (val>>>(i*4))&0x0f;
  24.                         str += vh.toString(16) + vl.toString(16);
  25.                 }
  26.                 return str;
  27.         };
  28.  
  29.         function cvt_hex(val) {
  30.                 var str="";
  31.                 var i;
  32.                 var v;
  33.  
  34.                 for( i=7; i>=0; i-- ) {
  35.                         v = (val>>>(i*4))&0x0f;
  36.                         str += v.toString(16);
  37.                 }
  38.                 return str;
  39.         };
  40.  
  41.  
  42.         function Utf8Encode(string) {
  43.                 string = string.replace(/\r\n/g,"\n");
  44.                 var utftext = "";
  45.  
  46.                 for (var n = 0; n < string.length; n++) {
  47.  
  48.                         var c = string.charCodeAt(n);
  49.  
  50.                         if (c < 128) {
  51.                                 utftext += String.fromCharCode(c);
  52.                         }
  53.                         else if((c > 127) && (c < 2048)) {
  54.                                 utftext += String.fromCharCode((c >> 6) | 192);
  55.                                 utftext += String.fromCharCode((c & 63) | 128);
  56.                         }
  57.                         else {
  58.                                 utftext += String.fromCharCode((c >> 12) | 224);
  59.                                 utftext += String.fromCharCode(((c >> 6) & 63) | 128);
  60.                                 utftext += String.fromCharCode((c & 63) | 128);
  61.                         }
  62.  
  63.                 }
  64.  
  65.                 return utftext;
  66.         };
  67.  
  68.         var blockstart;
  69.         var i, j;
  70.         var W = new Array(80);
  71.         var H0 = 0x67452301;
  72.         var H1 = 0xEFCDAB89;
  73.         var H2 = 0x98BADCFE;
  74.         var H3 = 0x10325476;
  75.         var H4 = 0xC3D2E1F0;
  76.         var A, B, C, D, E;
  77.         var temp;
  78.  
  79.         msg = Utf8Encode(msg);
  80.  
  81.         var msg_len = msg.length;
  82.  
  83.         var word_array = new Array();
  84.         for( i=0; i<msg_len-3; i+=4 ) {
  85.                 j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
  86.                 msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
  87.                 word_array.push( j );
  88.         }
  89.  
  90.         switch( msg_len % 4 ) {
  91.                 case 0:
  92.                         i = 0x080000000;
  93.                 break;
  94.                 case 1:
  95.                         i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
  96.                 break;
  97.  
  98.                 case 2:
  99.                         i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
  100.                 break;
  101.  
  102.                 case 3:
  103.                         i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8        | 0x80;
  104.                 break;
  105.         }
  106.  
  107.         word_array.push( i );
  108.  
  109.         while( (word_array.length % 16) != 14 ) word_array.push( 0 );
  110.  
  111.         word_array.push( msg_len>>>29 );
  112.         word_array.push( (msg_len<<3)&0x0ffffffff );
  113.  
  114.  
  115.         for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {
  116.  
  117.                 for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
  118.                 for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);
  119.  
  120.                 A = H0;
  121.                 B = H1;
  122.                 C = H2;
  123.                 D = H3;
  124.                 E = H4;
  125.  
  126.                 for( i= 0; i<=19; i++ ) {
  127.                         temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
  128.                         E = D;
  129.                         D = C;
  130.                         C = rotate_left(B,30);
  131.                         B = A;
  132.                         A = temp;
  133.                 }
  134.  
  135.                 for( i=20; i<=39; i++ ) {
  136.                         temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
  137.                         E = D;
  138.                         D = C;
  139.                         C = rotate_left(B,30);
  140.                         B = A;
  141.                         A = temp;
  142.                 }
  143.  
  144.                 for( i=40; i<=59; i++ ) {
  145.                         temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
  146.                         E = D;
  147.                         D = C;
  148.                         C = rotate_left(B,30);
  149.                         B = A;
  150.                         A = temp;
  151.                 }
  152.  
  153.                 for( i=60; i<=79; i++ ) {
  154.                         temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
  155.                         E = D;
  156.                         D = C;
  157.                         C = rotate_left(B,30);
  158.                         B = A;
  159.                         A = temp;
  160.                 }
  161.  
  162.                 H0 = (H0 + A) & 0x0ffffffff;
  163.                 H1 = (H1 + B) & 0x0ffffffff;
  164.                 H2 = (H2 + C) & 0x0ffffffff;
  165.                 H3 = (H3 + D) & 0x0ffffffff;
  166.                 H4 = (H4 + E) & 0x0ffffffff;
  167.  
  168.         }
  169.  
  170.         var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);
  171.  
  172.         return temp.toLowerCase();
  173.  
  174. }
  175. //javascript/248

回复 "JavaScript实现的SHA-1算法"

这儿你可以回复上面这条便签

captcha