1、使用
WECHAT.wxEncrypt('str', 'key', 'appID').toString()
2、aes.js文件
var WECHAT = {}; (function() { WECHAT.wxEncrypt = function(p, f, d) { var c = w.enc.Base64.parse(f + '='); f = w.lib.WordArray.create(w.enc.Latin1.parse(f).words, 16); var s = w.enc.Latin1.parse(function() { for (var c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz'.split(''), d = '', f = 0; 16 > f; f++) d += c[Math.floor(Math.random() * c.length)]; return d }()); p = w.enc.Utf8.parse(p); var v = w.enc.Hex.parse(('00000000' + Math.ceil(p.sigBytes).toString(16)).slice(-8)); s.concat(v).concat(p).concat(w.enc.Latin1.parse(d)); return w.AES.encrypt(s, c, { iv: f }) }; WECHAT.wxDecrypt = function(p, f, d) { var c = w.enc.Base64.parse(f + '='); f = w.lib.WordArray.create(w.enc.Latin1.parse(f).words, 16); p = w.AES.decrypt(p, c, { iv: f }).toString({ stringify: function(c) { for (var d = c.words, f = c.sigBytes, e = [], q = 16; 20 > q; q++) { var a = d[q >>> 2] >>> 24 - q % 4 * 8 & 255; e.push((a >>> 4).toString(16)); e.push((a & 15).toString(16)) } for (var p = parseInt(e.join(''), 16) + 20, e = [], q = 20; q < p; q++) a = d[q >>> 2] >>> 24 - q % 4 * 8 & 255, e.push(String.fromCharCode(a)); c = decodeURIComponent(escape(e.join(''))); e = []; for (q = p; q < f; q++) a = d[q >>> 2] >>> 24 - q % 4 * 8 & 255, e.push(String.fromCharCode(a)); d = e.join(''); return [c, d] } }); return p[1] == d ? p[0] : '' }; WECHAT.wxSignature = function(p, f, d, c) { p = [p, f, d, c].sort().join(''); return w.SHA1(p) }; WECHAT.SHA1 = function(p) { return w.SHA1(p) }; var w = w || function(p, f) { var d = {}, c = d.lib = {}, s = function() {}, v = c.Base = { extend: function(b) { s.prototype = this; var a = new s; b && a.mixIn(b); a.hasOwnProperty('init') || (a.init = function() { a.$super.init.apply(this, arguments) }); a.init.prototype = a; a.$super = this; return a }, create: function() { var b = this.extend(); b.init.apply(b, arguments); return b }, init: function() {}, mixIn: function(b) { for (var a in b) b.hasOwnProperty(a) && (this[a] = b[a]); b.hasOwnProperty('toString') && (this.toString = b.toString) }, clone: function() { return this.init.prototype.extend(this) } }, u = c.WordArray = v.extend({ init: function(b, a) { b = this.words = b || []; this.sigBytes = a != f ? a : 4 * b.length }, toString: function(b) { return (b || q).stringify(this) }, concat: function(b) { var a = this.words, h = b.words, m = this.sigBytes; b = b.sigBytes; this.clamp(); if (m % 4) for (var t = 0; t < b; t++) a[m + t >>> 2] |= (h[t >>> 2] >>> 24 - t % 4 * 8 & 255) << 24 - (m + t) % 4 * 8; else if (65535 < h.length) for (t = 0; t < b; t += 4) a[m + t >>> 2] = h[t >>> 2]; else a.push.apply(a, h); this.sigBytes += b; return this }, clamp: function() { var b = this.words, a = this.sigBytes; b[a >>> 2] &= 4294967295 << 32 - a % 4 * 8; b.length = p.ceil(a / 4) }, clone: function() { var b = v.clone.call(this); b.words = this.words.slice(0); return b }, random: function(b) { for (var a = [], h = 0; h < b; h += 4) a.push(4294967296 * p.random() | 0); return new u.init(a, b) } }), e = d.enc = {}, q = e.Hex = { stringify: function(b) { var a = b.words; b = b.sigBytes; for (var h = [], m = 0; m < b; m++) { var t = a[m >>> 2] >>> 24 - m % 4 * 8 & 255; h.push((t >>> 4).toString(16)); h.push((t & 15).toString(16)) } return h.join('') }, parse: function(b) { for (var a = b.length, h = [], m = 0; m < a; m += 2) h[m >>> 3] |= parseInt(b.substr(m, 2), 16) << 24 - m % 8 * 4; return new u.init(h, a / 2) } }, a = e.Latin1 = { stringify: function(b) { var a = b.words; b = b.sigBytes; for (var h = [], m = 0; m < b; m++) h.push(String.fromCharCode(a[m >>> 2] >>> 24 - m % 4 * 8 & 255)); return h.join('') }, parse: function(b) { for (var a = b.length, h = [], m = 0; m < a; m++) h[m >>> 2] |= (b.charCodeAt(m) & 255) << 24 - m % 4 * 8; return new u.init(h, a) } }, y = e.Utf8 = { stringify: function(b) { try { return decodeURIComponent(escape(a.stringify(b))) } catch (r) { throw Error('Malformed UTF-8 data'); } }, parse: function(b) { return a.parse(unescape(encodeURIComponent(b))) } }, r = c.BufferedBlockAlgorithm = v.extend({ reset: function() { this._data = new u.init; this._nDataBytes = 0 }, _append: function(b) { 'string' == typeof b && (b = y.parse(b)); this._data.concat(b); this._nDataBytes += b.sigBytes }, _process: function(b) { var a = this._data, h = a.words, m = a.sigBytes, t = this.blockSize, r = m / (4 * t), r = b ? p.ceil(r) : p.max((r | 0) - this._minBufferSize, 0); b = r * t; m = p.min(4 * b, m); if (b) { for (var c = 0; c < b; c += t) this._doProcessBlock(h, c); c = h.splice(0, b); a.sigBytes -= m } return new u.init(c, m) }, clone: function() { var b = v.clone.call(this); b._data = this._data.clone(); return b }, _minBufferSize: 0 }); c.Hasher = r.extend({ cfg: v.extend(), init: function(b) { this.cfg = this.cfg.extend(b); this.reset() }, reset: function() { r.reset.call(this); this._doReset() }, update: function(b) { this._append(b); this._process(); return this }, finalize: function(b) { b && this._append(b); return this._doFinalize() }, blockSize: 16, _createHelper: function(b) { return function(a, h) { return (new b.init(h)).finalize(a) } }, _createHmacHelper: function(b) { return function(a, h) { return (new A.HMAC.init(b, h)).finalize(a) } } }); var A = d.algo = {}; return d }(Math); (function() { var p = w, f = p.lib.WordArray; p.enc.Base64 = { stringify: function(d) { var c = d.words, f = d.sigBytes, p = this._map; d.clamp(); d = []; for (var u = 0; u < f; u += 3) for (var e = (c[u >>> 2] >>> 24 - u % 4 * 8 & 255) << 16 | (c[u + 1 >>> 2] >>> 24 - (u + 1) % 4 * 8 & 255) << 8 | c[u + 2 >>> 2] >>> 24 - (u + 2) % 4 * 8 & 255, q = 0; 4 > q && u + .75 * q < f; q++) d.push(p.charAt(e >>> 6 * (3 - q) & 63)); if (c = p.charAt(64)) for (; d.length % 4;) d.push(c); return d.join('') }, parse: function(d) { var c = d.length, p = this._map, v = p.charAt(64); v && (v = d.indexOf(v), -1 != v && (c = v)); for (var v = [], u = 0, e = 0; e < c; e++) if (e % 4) { var q = p.indexOf(d.charAt(e - 1)) << e % 4 * 2, a = p.indexOf(d.charAt(e)) >>> 6 - e % 4 * 2; v[u >>> 2] |= (q | a) << 24 - u % 4 * 8; u++ } return f.create(v, u) }, _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' } })(); (function(p) { function f(a, c, b, d, h, m, t) { a = a + (c & b | ~c & d) + h + t; return (a << m | a >>> 32 - m) + c } function d(a, c, b, d, h, m, t) { a = a + (c & d | b & ~d) + h + t; return (a << m | a >>> 32 - m) + c } function c(a, c, b, d, h, m, t) { a = a + (c ^ b ^ d) + h + t; return (a << m | a >>> 32 - m) + c } function s(a, c, b, d, h, m, t) { a = a + (b ^ (c | ~d)) + h + t; return (a << m | a >>> 32 - m) + c } for (var v = w, u = v.lib, e = u.WordArray, q = u.Hasher, u = v.algo, a = [], y = 0; 64 > y; y++) a[y] = 4294967296 * p.abs(p.sin(y + 1)) | 0; u = u.MD5 = q.extend({ _doReset: function() { this._hash = new e.init([1732584193, 4023233417, 2562383102, 271733878]) }, _doProcessBlock: function(r, e) { for (var b = 0; 16 > b; b++) { var q = e + b, h = r[q]; r[q] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360 } var b = this._hash.words, q = r[e + 0], h = r[e + 1], m = r[e + 2], t = r[e + 3], p = r[e + 4], u = r[e + 5], v = r[e + 6], y = r[e + 7], w = r[e + 8], C = r[e + 9], D = r[e + 10], E = r[e + 11], F = r[e + 12], G = r[e + 13], H = r[e + 14], I = r[e + 15], g = b[0], n = b[1], k = b[2], l = b[3], g = f(g, n, k, l, q, 7, a[0]), l = f(l, g, n, k, h, 12, a[1]), k = f(k, l, g, n, m, 17, a[2]), n = f(n, k, l, g, t, 22, a[3]), g = f(g, n, k, l, p, 7, a[4]), l = f(l, g, n, k, u, 12, a[5]), k = f(k, l, g, n, v, 17, a[6]), n = f(n, k, l, g, y, 22, a[7]), g = f(g, n, k, l, w, 7, a[8]), l = f(l, g, n, k, C, 12, a[9]), k = f(k, l, g, n, D, 17, a[10]), n = f(n, k, l, g, E, 22, a[11]), g = f(g, n, k, l, F, 7, a[12]), l = f(l, g, n, k, G, 12, a[13]), k = f(k, l, g, n, H, 17, a[14]), n = f(n, k, l, g, I, 22, a[15]), g = d(g, n, k, l, h, 5, a[16]), l = d(l, g, n, k, v, 9, a[17]), k = d(k, l, g, n, E, 14, a[18]), n = d(n, k, l, g, q, 20, a[19]), g = d(g, n, k, l, u, 5, a[20]), l = d(l, g, n, k, D, 9, a[21]), k = d(k, l, g, n, I, 14, a[22]), n = d(n, k, l, g, p, 20, a[23]), g = d(g, n, k, l, C, 5, a[24]), l = d(l, g, n, k, H, 9, a[25]), k = d(k, l, g, n, t, 14, a[26]), n = d(n, k, l, g, w, 20, a[27]), g = d(g, n, k, l, G, 5, a[28]), l = d(l, g, n, k, m, 9, a[29]), k = d(k, l, g, n, y, 14, a[30]), n = d(n, k, l, g, F, 20, a[31]), g = c(g, n, k, l, u, 4, a[32]), l = c(l, g, n, k, w, 11, a[33]), k = c(k, l, g, n, E, 16, a[34]), n = c(n, k, l, g, H, 23, a[35]), g = c(g, n, k, l, h, 4, a[36]), l = c(l, g, n, k, p, 11, a[37]), k = c(k, l, g, n, y, 16, a[38]), n = c(n, k, l, g, D, 23, a[39]), g = c(g, n, k, l, G, 4, a[40]), l = c(l, g, n, k, q, 11, a[41]), k = c(k, l, g, n, t, 16, a[42]), n = c(n, k, l, g, v, 23, a[43]), g = c(g, n, k, l, C, 4, a[44]), l = c(l, g, n, k, F, 11, a[45]), k = c(k, l, g, n, I, 16, a[46]), n = c(n, k, l, g, m, 23, a[47]), g = s(g, n, k, l, q, 6, a[48]), l = s(l, g, n, k, y, 10, a[49]), k = s(k, l, g, n, H, 15, a[50]), n = s(n, k, l, g, u, 21, a[51]), g = s(g, n, k, l, F, 6, a[52]), l = s(l, g, n, k, t, 10, a[53]), k = s(k, l, g, n, D, 15, a[54]), n = s(n, k, l, g, h, 21, a[55]), g = s(g, n, k, l, w, 6, a[56]), l = s(l, g, n, k, I, 10, a[57]), k = s(k, l, g, n, v, 15, a[58]), n = s(n, k, l, g, G, 21, a[59]), g = s(g, n, k, l, p, 6, a[60]), l = s(l, g, n, k, E, 10, a[61]), k = s(k, l, g, n, m, 15, a[62]), n = s(n, k, l, g, C, 21, a[63]); b[0] = b[0] + g | 0; b[1] = b[1] + n | 0; b[2] = b[2] + k | 0; b[3] = b[3] + l | 0 }, _doFinalize: function() { var a = this._data, c = a.words, b = 8 * this._nDataBytes, d = 8 * a.sigBytes; c[d >>> 5] |= 128 << 24 - d % 32; var h = p.floor(b / 4294967296); c[(d + 64 >>> 9 << 4) + 15] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360; c[(d + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360; a.sigBytes = 4 * (c.length + 1); this._process(); a = this._hash; c = a.words; for (b = 0; 4 > b; b++) d = c[b], c[b] = (d << 8 | d >>> 24) & 16711935 | (d << 24 | d >>> 8) & 4278255360; return a }, clone: function() { var a = q.clone.call(this); a._hash = this._hash.clone(); return a } }); v.MD5 = q._createHelper(u); v.HmacMD5 = q._createHmacHelper(u) })(Math); (function() { var p = w, f = p.lib, d = f.Base, c = f.WordArray, f = p.algo, s = f.EvpKDF = d.extend({ cfg: d.extend({ keySize: 4, hasher: f.MD5, iterations: 1 }), init: function(c) { this.cfg = this.cfg.extend(c) }, compute: function(d, f) { for (var e = this.cfg, q = e.hasher.create(), a = c.create(), p = a.words, r = e.keySize, e = e.iterations; p.length < r;) { s && q.update(s); var s = q.update(d).finalize(f); q.reset(); for (var b = 1; b < e; b++) s = q.finalize(s), q.reset(); a.concat(s) } a.sigBytes = 4 * r; return a } }); p.EvpKDF = function(c, d, e) { return s.create(e).compute(c, d) } })(); w.lib.Cipher || function(p) { var f = w, d = f.lib, c = d.Base, s = d.WordArray, v = d.BufferedBlockAlgorithm, u = f.enc.Base64, e = f.algo.EvpKDF, q = d.Cipher = v.extend({ cfg: c.extend(), createEncryptor: function(a, b) { return this.create(this._ENC_XFORM_MODE, a, b) }, createDecryptor: function(a, b) { return this.create(this._DEC_XFORM_MODE, a, b) }, init: function(a, b, c) { this.cfg = this.cfg.extend(c); this._xformMode = a; this._key = b; this.reset() }, reset: function() { v.reset.call(this); this._doReset() }, process: function(a) { this._append(a); return this._process() }, finalize: function(a) { a && this._append(a); return this._doFinalize() }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: function(a) { return { encrypt: function(m, c, d) { return ('string' == typeof c ? x : b).encrypt(a, m, c, d) }, decrypt: function(m, c, d) { return ('string' == typeof c ? x : b).decrypt(a, m, c, d) } } } }); d.StreamCipher = q.extend({ _doFinalize: function() { return this._process(!0) }, blockSize: 1 }); var a = f.mode = {}, y = function(a, b, c) { var d = this._iv; d ? this._iv = p : d = this._prevBlock; for (var e = 0; e < c; e++) a[b + e] ^= d[e] }, r = (d.BlockCipherMode = c.extend({ createEncryptor: function(a, b) { return this.Encryptor.create(a, b) }, createDecryptor: function(a, b) { return this.Decryptor.create(a, b) }, init: function(a, b) { this._cipher = a; this._iv = b } })).extend(); r.Encryptor = r.extend({ processBlock: function(a, b) { var c = this._cipher, d = c.blockSize; y.call(this, a, b, d); c.encryptBlock(a, b); this._prevBlock = a.slice(b, b + d) } }); r.Decryptor = r.extend({ processBlock: function(a, b) { var c = this._cipher, d = c.blockSize, e = a.slice(b, b + d); c.decryptBlock(a, b); y.call(this, a, b, d); this._prevBlock = e } }); a = a.CBC = r; r = (f.pad = {}).Pkcs7 = { pad: function(a, b) { for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, e = [], f = 0; f < c; f += 4) e.push(d); c = s.create(e, c); a.concat(c) }, unpad: function(a) { a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255 } }; d.BlockCipher = q.extend({ cfg: q.cfg.extend({ mode: a, padding: r }), reset: function() { q.reset.call(this); var a = this.cfg, b = a.iv, a = a.mode; if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor; else c = a.createDecryptor, this._minBufferSize = 1; this._mode = c.call(a, this, b && b.words) }, _doProcessBlock: function(a, b) { this._mode.processBlock(a, b) }, _doFinalize: function() { var a = this.cfg.padding; if (this._xformMode == this._ENC_XFORM_MODE) { a.pad(this._data, this.blockSize); var b = this._process(!0) } else b = this._process(!0), a.unpad(b); return b }, blockSize: 4 }); var A = d.CipherParams = c.extend({ init: function(a) { this.mixIn(a) }, toString: function(a) { return (a || this.formatter).stringify(this) } }), a = (f.format = {}).OpenSSL = { stringify: function(a) { var b = a.ciphertext; a = a.salt; return (a ? s.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(u) }, parse: function(a) { a = u.parse(a); var b = a.words; if (1398893684 == b[0] && 1701076831 == b[1]) { var c = s.create(b.slice(2, 4)); b.splice(0, 4); a.sigBytes -= 16 } return A.create({ ciphertext: a, salt: c }) } }, b = d.SerializableCipher = c.extend({ cfg: c.extend({ format: a }), encrypt: function(a, b, c, d) { d = this.cfg.extend(d); var e = a.createEncryptor(c, d); b = e.finalize(b); e = e.cfg; return A.create({ ciphertext: b, key: c, iv: e.iv, algorithm: a, mode: e.mode, padding: e.padding, blockSize: a.blockSize, formatter: d.format }) }, decrypt: function(a, b, c, d) { d = this.cfg.extend(d); b = this._parse(b, d.format); return a.createDecryptor(c, d).finalize(b.ciphertext) }, _parse: function(a, b) { return 'string' == typeof a ? b.parse(a, this) : a } }), f = (f.kdf = {}).OpenSSL = { execute: function(a, b, c, d) { d || (d = s.random(8)); a = e.create({ keySize: b + c }).compute(a, d); c = s.create(a.words.slice(b), 4 * c); a.sigBytes = 4 * b; return A.create({ key: a, iv: c, salt: d }) } }, x = d.PasswordBasedCipher = b.extend({ cfg: b.cfg.extend({ kdf: f }), encrypt: function(a, c, d, e) { e = this.cfg.extend(e); d = e.kdf.execute(d, a.keySize, a.ivSize); e.iv = d.iv; a = b.encrypt.call(this, a, c, d.key, e); a.mixIn(d); return a }, decrypt: function(a, c, d, e) { e = this.cfg.extend(e); c = this._parse(c, e.format); d = e.kdf.execute(d, a.keySize, a.ivSize, c.salt); e.iv = d.iv; return b.decrypt.call(this, a, c, d.key, e) } }) }(); (function() { for (var p = w, f = p.lib.BlockCipher, d = p.algo, c = [], s = [], v = [], u = [], e = [], q = [], a = [], y = [], r = [], A = [], b = [], x = 0; 256 > x; x++) b[x] = 128 > x ? x << 1 : x << 1 ^ 283; for (var h = 0, m = 0, x = 0; 256 > x; x++) { var t = m ^ m << 1 ^ m << 2 ^ m << 3 ^ m << 4, t = t >>> 8 ^ t & 255 ^ 99; c[h] = t; s[t] = h; var B = b[h], J = b[B], K = b[J], z = 257 * b[t] ^ 16843008 * t; v[h] = z << 24 | z >>> 8; u[h] = z << 16 | z >>> 16; e[h] = z << 8 | z >>> 24; q[h] = z; z = 16843009 * K ^ 65537 * J ^ 257 * B ^ 16843008 * h; a[t] = z << 24 | z >>> 8; y[t] = z << 16 | z >>> 16; r[t] = z << 8 | z >>> 24; A[t] = z; h ? (h = B ^ b[b[b[K ^ B]]], m ^= b[b[m]]) : h = m = 1 } var L = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], d = d.AES = f.extend({ _doReset: function() { for (var b = this._key, d = b.words, e = b.sigBytes / 4, b = 4 * ((this._nRounds = e + 6) + 1), f = this._keySchedule = [], m = 0; m < b; m++) if (m < e) f[m] = d[m]; else { var h = f[m - 1]; m % e ? 6 < e && 4 == m % e && (h = c[h >>> 24] << 24 | c[h >>> 16 & 255] << 16 | c[h >>> 8 & 255] << 8 | c[h & 255]) : (h = h << 8 | h >>> 24, h = c[h >>> 24] << 24 | c[h >>> 16 & 255] << 16 | c[h >>> 8 & 255] << 8 | c[h & 255], h ^= L[m / e | 0] << 24); f[m] = f[m - e] ^ h } d = this._invKeySchedule = []; for (e = 0; e < b; e++) m = b - e, h = e % 4 ? f[m] : f[m - 4], d[e] = 4 > e || 4 >= m ? h : a[c[h >>> 24]] ^ y[c[h >>> 16 & 255]] ^ r[c[h >>> 8 & 255]] ^ A[c[h & 255]] }, encryptBlock: function(a, b) { this._doCryptBlock(a, b, this._keySchedule, v, u, e, q, c) }, decryptBlock: function(b, c) { var d = b[c + 1]; b[c + 1] = b[c + 3]; b[c + 3] = d; this._doCryptBlock(b, c, this._invKeySchedule, a, y, r, A, s); d = b[c + 1]; b[c + 1] = b[c + 3]; b[c + 3] = d }, _doCryptBlock: function(a, b, c, d, e, h, m, g) { for (var n = this._nRounds, k = a[b] ^ c[0], l = a[b + 1] ^ c[1], f = a[b + 2] ^ c[2], q = a[b + 3] ^ c[3], p = 4, r = 1; r < n; r++) var u = d[k >>> 24] ^ e[l >>> 16 & 255] ^ h[f >>> 8 & 255] ^ m[q & 255] ^ c[p++], s = d[l >>> 24] ^ e[f >>> 16 & 255] ^ h[q >>> 8 & 255] ^ m[k & 255] ^ c[p++], t = d[f >>> 24] ^ e[q >>> 16 & 255] ^ h[k >>> 8 & 255] ^ m[l & 255] ^ c[p++], q = d[q >>> 24] ^ e[k >>> 16 & 255] ^ h[l >>> 8 & 255] ^ m[f & 255] ^ c[p++], k = u, l = s, f = t; u = (g[k >>> 24] << 24 | g[l >>> 16 & 255] << 16 | g[f >>> 8 & 255] << 8 | g[q & 255]) ^ c[p++]; s = (g[l >>> 24] << 24 | g[f >>> 16 & 255] << 16 | g[q >>> 8 & 255] << 8 | g[k & 255]) ^ c[p++]; t = (g[f >>> 24] << 24 | g[q >>> 16 & 255] << 16 | g[k >>> 8 & 255] << 8 | g[l & 255]) ^ c[p++]; q = (g[q >>> 24] << 24 | g[k >>> 16 & 255] << 16 | g[l >>> 8 & 255] << 8 | g[f & 255]) ^ c[p++]; a[b] = u; a[b + 1] = s; a[b + 2] = t; a[b + 3] = q }, keySize: 8 }); p.AES = f._createHelper(d) })(); (function() { var p = w, f = p.lib, d = f.WordArray, c = f.Hasher, s = [], f = p.algo.SHA1 = c.extend({ _doReset: function() { this._hash = new d.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) }, _doProcessBlock: function(c, d) { for (var e = this._hash.words, f = e[0], a = e[1], p = e[2], r = e[3], w = e[4], b = 0; 80 > b; b++) { if (16 > b) s[b] = c[d + b] | 0; else { var x = s[b - 3] ^ s[b - 8] ^ s[b - 14] ^ s[b - 16]; s[b] = x << 1 | x >>> 31 } x = (f << 5 | f >>> 27) + w + s[b]; x = 20 > b ? x + ((a & p | ~a & r) + 1518500249) : 40 > b ? x + ((a ^ p ^ r) + 1859775393) : 60 > b ? x + ((a & p | a & r | p & r) - 1894007588) : x + ((a ^ p ^ r) - 899497514); w = r; r = p; p = a << 30 | a >>> 2; a = f; f = x } e[0] = e[0] + f | 0; e[1] = e[1] + a | 0; e[2] = e[2] + p | 0; e[3] = e[3] + r | 0; e[4] = e[4] + w | 0 }, _doFinalize: function() { var c = this._data, d = c.words, e = 8 * this._nDataBytes, f = 8 * c.sigBytes; d[f >>> 5] |= 128 << 24 - f % 32; d[(f + 64 >>> 9 << 4) + 14] = Math.floor(e / 4294967296); d[(f + 64 >>> 9 << 4) + 15] = e; c.sigBytes = 4 * d.length; this._process(); return this._hash }, clone: function() { var d = c.clone.call(this); d._hash = this._hash.clone(); return d } }); p.SHA1 = c._createHelper(f); p.HmacSHA1 = c._createHmacHelper(f) })() })();