emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
          javascript 版的 sha-1

           

          /*
           * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
           * in FIPS PUB 180-1
           * Copyright (C) Paul Johnston 2000 - 2002.
           * See http://pajhome.org.uk/site/legal.html for details.
           */

          /*
           * Convert a 32-bit number to a hex string with ms-byte first
           */
          var hex_chr = "0123456789abcdef";
          function hex(num)
          {
            var str = "";
            for(var j = 7; j >= 0; j--)
              str += hex_chr.charAt((num >> (j * 4)) & 0x0F);
            return str;
          }

          /*
           * Convert a string to a sequence of 16-word blocks, stored as an array.
           * Append padding bits and the length, as described in the SHA1 standard.
           */
          function str2blks_SHA1(str)
          {
            var nblk = ((str.length + 8) >> 6) + 1;
            var blks = new Array(nblk * 16);
            for(var i = 0; i < nblk * 16; i++) blks[i] = 0;
            for(var i = 0; i < str.length; i++)
              blks[i >> 2] |= str.charCodeAt(i) << (24 - (i % 4) * 8);
            blks[i >> 2] |= 0x80 << (24 - (i % 4) * 8);
            blks[nblk * 16 - 1] = str.length * 8;
            return blks;
          }

          /*
           * Add integers, wrapping at 2^32. This uses 16-bit operations internally
           * to work around bugs in some JS interpreters.
           */
          function safe_add(x, y)
          {
            var lsw = (x & 0xFFFF) + (y & 0xFFFF);
            var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
            return (msw << 16) | (lsw & 0xFFFF);
          }

          /*
           * Bitwise rotate a 32-bit number to the left
           */
          function rol(num, cnt)
          {
            return (num << cnt) | (num >>> (32 - cnt));
          }

          /*
           * Perform the appropriate triplet combination function for the current
           * iteration
           */
          function ft(t, b, c, d)
          {
            if(t < 20) return (b & c) | ((~b) & d);
            if(t < 40) return b ^ c ^ d;
            if(t < 60) return (b & c) | (b & d) | (c & d);
            return b ^ c ^ d;
          }

          /*
           * Determine the appropriate additive constant for the current iteration
           */
          function kt(t)
          {
            return (t < 20) ?  1518500249 : (t < 40) ?  1859775393 :
                   (t < 60) ? -1894007588 : -899497514;
          }

          /*
           * Take a string and return the hex representation of its SHA-1.
           */
          function calcSHA1(str)
          {
            var x = str2blks_SHA1(str);
            var w = new Array(80);

            var a =  1732584193;
            var b = -271733879;
            var c = -1732584194;
            var d =  271733878;
            var e = -1009589776;

            for(var i = 0; i < x.length; i += 16)
            {
              var olda = a;
              var oldb = b;
              var oldc = c;
              var oldd = d;
              var olde = e;

              for(var j = 0; j < 80; j++)
              {
                if(j < 16) w[j] = x[i + j];
                else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
                var t = safe_add(safe_add(rol(a, 5), ft(j, b, c, d)), safe_add(safe_add(e, w[j]), kt(j)));
                e = d;
                d = c;
                c = rol(b, 30);
                b = a;
                a = t;
              }

              a = safe_add(a, olda);
              b = safe_add(b, oldb);
              c = safe_add(c, oldc);
              d = safe_add(d, oldd);
              e = safe_add(e, olde);
            }
            return hex(a) + hex(b) + hex(c) + hex(d) + hex(e);
          }


          posted on 2005-05-18 14:50 emu 閱讀(638) 評論(0)  編輯  收藏 所屬分類: DHTML和JAVASCRIPT 技術
          主站蜘蛛池模板: 攀枝花市| 临武县| 汶上县| 子长县| 鄂伦春自治旗| 平阳县| 古丈县| 晋中市| 巢湖市| 海口市| 曲靖市| 清涧县| 元阳县| 富民县| 团风县| 重庆市| 随州市| 沭阳县| 盱眙县| 荃湾区| 时尚| 道孚县| 井冈山市| 灯塔市| 山阳县| 嘉善县| 翁牛特旗| 申扎县| 砀山县| 昌都县| 武强县| 工布江达县| 保康县| 竹北市| 徐州市| 宿松县| 平顶山市| 米林县| 南木林县| 平安县| 吴桥县|