author: sky_da
date:2022-11-17
1-1引入基本算法库CryptoJS
var CryptoJS = CryptoJS || function(y, h) { var j = {} , g = j.lib = {} , f = function() {} , z = g.Base = { extend: function(b) { f.prototype = this; var d = new f; b && d.mixIn(b); d.hasOwnProperty("init") || (d.init = function() { d.$super.init.apply(this, arguments) } ); d.init.prototype = d; d.$super = this; return d }, create: function() { var b = this.extend(); b.init.apply(b, arguments); return b }, init: function() {}, mixIn: function(b) { for (var d in b) { b.hasOwnProperty(d) && (this[d] = b[d]) } b.hasOwnProperty("toString") && (this.toString = b.toString) }, clone: function() { return this.init.prototype.extend(this) } } , c = g.WordArray = z.extend({ init: function(b, d) { b = this.words = b || []; this.sigBytes = d != h ? d : 4 * b.length }, toString: function(b) { return (b || t).stringify(this) }, concat: function(d) { var n = this.words , b = d.words , l = this.sigBytes; d = d.sigBytes; this.clamp(); if (l % 4) { for (var e = 0; e < d; e++) { n[l + e >>> 2] |= (b[e >>> 2] >>> 24 - 8 * (e % 4) & 255) << 24 - 8 * ((l + e) % 4) } } else { if (65535 < b.length) { for (e = 0; e < d; e += 4) { n[l + e >>> 2] = b[e >>> 2] } } else { n.push.apply(n, b) } } this.sigBytes += d; return this }, clamp: function() { var b = this.words , d = this.sigBytes; b[d >>> 2] &= 4294967295 << 32 - 8 * (d % 4); b.length = y.ceil(d / 4) }, clone: function() { var b = z.clone.call(this); b.words = this.words.slice(0); return b }, random: function(d) { for (var e = [], b = 0; b < d; b += 4) { e.push(4294967296 * y.random() | 0) } return new c.init(e,d) } }) , o = j.enc = {} , t = o.Hex = { stringify: function(d) { var n = d.words; d = d.sigBytes; for (var b = [], l = 0; l < d; l++) { var e = n[l >>> 2] >>> 24 - 8 * (l % 4) & 255; b.push((e >>> 4).toString(16)); b.push((e & 15).toString(16)) } return b.join("") }, parse: function(d) { for (var l = d.length, b = [], e = 0; e < l; e += 2) { b[e >>> 3] |= parseInt(d.substr(e, 2), 16) << 24 - 4 * (e % 8) } return new c.init(b,l / 2) } } , k = o.Latin1 = { stringify: function(d) { var l = d.words; d = d.sigBytes; for (var b = [], e = 0; e < d; e++) { b.push(String.fromCharCode(l[e >>> 2] >>> 24 - 8 * (e % 4) & 255)) } return b.join("") }, parse: function(d) { for (var l = d.length, b = [], e = 0; e < l; e++) { b[e >>> 2] |= (d.charCodeAt(e) & 255) << 24 - 8 * (e % 4) } return new c.init(b,l) } } , m = o.Utf8 = { stringify: function(b) { try { return decodeURIComponent(escape(k.stringify(b))) } catch (d) { throw Error("Malformed UTF-8 data") } }, parse: function(b) { return k.parse(unescape(encodeURIComponent(b))) } } , a = g.BufferedBlockAlgorithm = z.extend({ reset: function() { this._data = new c.init; this._nDataBytes = 0 }, _append: function(b) { "string" == typeof b && (b = m.parse(b)); this._data.concat(b); this._nDataBytes += b.sigBytes }, _process: function(n) { var s = this._data , l = s.words , q = s.sigBytes , p = this.blockSize , d = q / (4 * p) , d = n ? y.ceil(d) : y.max((d | 0) - this._minBufferSize, 0); n = d * p; q = y.min(4 * n, q); if (n) { for (var r = 0; r < n; r += p) { this._doProcessBlock(l, r) } r = l.splice(0, n); s.sigBytes -= q } return new c.init(r,q) }, clone: function() { var b = z.clone.call(this); b._data = this._data.clone(); return b }, _minBufferSize: 0 }); g.Hasher = a.extend({ cfg: z.extend(), init: function(b) { this.cfg = this.cfg.extend(b); this.reset() }, reset: function() { a.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(e, d) { return (new b.init(d)).finalize(e) } }, _createHmacHelper: function(b) { return function(e, d) { return (new i.HMAC.init(b,d)).finalize(e) } } }); var i = j.algo = {}; return j }(Math); (function() { var b = CryptoJS , a = b.lib.WordArray; b.enc.Base64 = { stringify: function(i) { var j = i.words , e = i.sigBytes , g = this._map; i.clamp(); i = []; for (var h = 0; h < e; h += 3) { for (var c = (j[h >>> 2] >>> 24 - 8 * (h % 4) & 255) << 16 | (j[h + 1 >>> 2] >>> 24 - 8 * ((h + 1) % 4) & 255) << 8 | j[h + 2 >>> 2] >>> 24 - 8 * ((h + 2) % 4) & 255, f = 0; 4 > f && h + 0.75 * f < e; f++) { i.push(g.charAt(c >>> 6 * (3 - f) & 63)) } } if (j = g.charAt(64)) { for (; i.length % 4; ) { i.push(j) } } return i.join("") }, parse: function(j) { var k = j.length , i = this._map , g = i.charAt(64); g && (g = j.indexOf(g), -1 != g && (k = g)); for (var g = [], h = 0, e = 0; e < k; e++) { if (e % 4) { var f = i.indexOf(j.charAt(e - 1)) << 2 * (e % 4) , c = i.indexOf(j.charAt(e)) >>> 6 - 2 * (e % 4); g[h >>> 2] |= (f | c) << 24 - 8 * (h % 4); h++ } } return a.create(g, h) }, _map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" } } )(); (function(m) { function f(l, r, n, s, d, q, p) { l = l + (r & n | ~r & s) + d + p; return (l << q | l >>> 32 - q) + r } function g(l, r, n, s, d, q, p) { l = l + (r & s | n & ~s) + d + p; return (l << q | l >>> 32 - q) + r } function e(l, r, n, s, d, q, p) { l = l + (r ^ n ^ s) + d + p; return (l << q | l >>> 32 - q) + r } function c(l, r, n, s, d, q, p) { l = l + (n ^ (r | ~s)) + d + p; return (l << q | l >>> 32 - q) + r } for (var o = CryptoJS, a = o.lib, j = a.WordArray, k = a.Hasher, a = o.algo, h = [], i = 0; 64 > i; i++) { h[i] = 4294967296 * m.abs(m.sin(i + 1)) | 0 } a = a.MD5 = k.extend({ _doReset: function() { this._hash = new j.init([1732584193, 4023233417, 2562383102, 271733878]) }, _doProcessBlock: function(J, T) { for (var V = 0; 16 > V; V++) { var U = T + V , N = J[U]; J[U] = (N << 8 | N >>> 24) & 16711935 | (N << 24 | N >>> 8) & 4278255360 } var V = this._hash.words , U = J[T + 0] , N = J[T + 1] , S = J[T + 2] , F = J[T + 3] , d = J[T + 4] , L = J[T + 5] , H = J[T + 6] , n = J[T + 7] , p = J[T + 8] , E = J[T + 9] , l = J[T + 10] , b = J[T + 11] , M = J[T + 12] , K = J[T + 13] , I = J[T + 14] , G = J[T + 15] , R = V[0] , Q = V[1] , P = V[2] , O = V[3] , R = f(R, Q, P, O, U, 7, h[0]) , O = f(O, R, Q, P, N, 12, h[1]) , P = f(P, O, R, Q, S, 17, h[2]) , Q = f(Q, P, O, R, F, 22, h[3]) , R = f(R, Q, P, O, d, 7, h[4]) , O = f(O, R, Q, P, L, 12, h[5]) , P = f(P, O, R, Q, H, 17, h[6]) , Q = f(Q, P, O, R, n, 22, h[7]) , R = f(R, Q, P, O, p, 7, h[8]) , O = f(O, R, Q, P, E, 12, h[9]) , P = f(P, O, R, Q, l, 17, h[10]) , Q = f(Q, P, O, R, b, 22, h[11]) , R = f(R, Q, P, O, M, 7, h[12]) , O = f(O, R, Q, P, K, 12, h[13]) , P = f(P, O, R, Q, I, 17, h[14]) , Q = f(Q, P, O, R, G, 22, h[15]) , R = g(R, Q, P, O, N, 5, h[16]) , O = g(O, R, Q, P, H, 9, h[17]) , P = g(P, O, R, Q, b, 14, h[18]) , Q = g(Q, P, O, R, U, 20, h[19]) , R = g(R, Q, P, O, L, 5, h[20]) , O = g(O, R, Q, P, l, 9, h[21]) , P = g(P, O, R, Q, G, 14, h[22]) , Q = g(Q, P, O, R, d, 20, h[23]) , R = g(R, Q, P, O, E, 5, h[24]) , O = g(O, R, Q, P, I, 9, h[25]) , P = g(P, O, R, Q, F, 14, h[26]) , Q = g(Q, P, O, R, p, 20, h[27]) , R = g(R, Q, P, O, K, 5, h[28]) , O = g(O, R, Q, P, S, 9, h[29]) , P = g(P, O, R, Q, n, 14, h[30]) , Q = g(Q, P, O, R, M, 20, h[31]) , R = e(R, Q, P, O, L, 4, h[32]) , O = e(O, R, Q, P, p, 11, h[33]) , P = e(P, O, R, Q, b, 16, h[34]) , Q = e(Q, P, O, R, I, 23, h[35]) , R = e(R, Q, P, O, N, 4, h[36]) , O = e(O, R, Q, P, d, 11, h[37]) , P = e(P, O, R, Q, n, 16, h[38]) , Q = e(Q, P, O, R, l, 23, h[39]) , R = e(R, Q, P, O, K, 4, h[40]) , O = e(O, R, Q, P, U, 11, h[41]) , P = e(P, O, R, Q, F, 16, h[42]) , Q = e(Q, P, O, R, H, 23, h[43]) , R = e(R, Q, P, O, E, 4, h[44]) , O = e(O, R, Q, P, M, 11, h[45]) , P = e(P, O, R, Q, G, 16, h[46]) , Q = e(Q, P, O, R, S, 23, h[47]) , R = c(R, Q, P, O, U, 6, h[48]) , O = c(O, R, Q, P, n, 10, h[49]) , P = c(P, O, R, Q, I, 15, h[50]) , Q = c(Q, P, O, R, L, 21, h[51]) , R = c(R, Q, P, O, M, 6, h[52]) , O = c(O, R, Q, P, F, 10, h[53]) , P = c(P, O, R, Q, l, 15, h[54]) , Q = c(Q, P, O, R, N, 21, h[55]) , R = c(R, Q, P, O, p, 6, h[56]) , O = c(O, R, Q, P, G, 10, h[57]) , P = c(P, O, R, Q, H, 15, h[58]) , Q = c(Q, P, O, R, K, 21, h[59]) , R = c(R, Q, P, O, d, 6, h[60]) , O = c(O, R, Q, P, b, 10, h[61]) , P = c(P, O, R, Q, S, 15, h[62]) , Q = c(Q, P, O, R, E, 21, h[63]); V[0] = V[0] + R | 0; V[1] = V[1] + Q | 0; V[2] = V[2] + P | 0; V[3] = V[3] + O | 0 }, _doFinalize: function() { var l = this._data , p = l.words , n = 8 * this._nDataBytes , q = 8 * l.sigBytes; p[q >>> 5] |= 128 << 24 - q % 32; var d = m.floor(n / 4294967296); p[(q + 64 >>> 9 << 4) + 15] = (d << 8 | d >>> 24) & 16711935 | (d << 24 | d >>> 8) & 4278255360; p[(q + 64 >>> 9 << 4) + 14] = (n << 8 | n >>> 24) & 16711935 | (n << 24 | n >>> 8) & 4278255360; l.sigBytes = 4 * (p.length + 1); this._process(); l = this._hash; p = l.words; for (n = 0; 4 > n; n++) { q = p[n], p[n] = (q << 8 | q >>> 24) & 16711935 | (q << 24 | q >>> 8) & 4278255360 } return l }, clone: function() { var d = k.clone.call(this); d._hash = this._hash.clone(); return d } }); o.MD5 = k._createHelper(a); o.HmacMD5 = k._createHmacHelper(a) } )(Math); (function() { var b = CryptoJS , a = b.lib , e = a.Base , f = a.WordArray , a = b.algo , c = a.EvpKDF = e.extend({ cfg: e.extend({ keySize: 4, hasher: a.MD5, iterations: 1 }), init: function(g) { this.cfg = this.cfg.extend(g) }, compute: function(k, i) { for (var h = this.cfg, o = h.hasher.create(), m = f.create(), q = m.words, g = h.keySize, h = h.iterations; q.length < g; ) { j && o.update(j); var j = o.update(k).finalize(i); o.reset(); for (var n = 1; n < h; n++) { j = o.finalize(j), o.reset() } m.concat(j) } m.sigBytes = 4 * g; return m } }); b.EvpKDF = function(h, g, i) { return c.create(i).compute(h, g) } } )(); CryptoJS.lib.Cipher || function(C) { var j = CryptoJS , m = j.lib , i = m.Base , h = m.WordArray , D = m.BufferedBlockAlgorithm , g = j.enc.Base64 , A = j.algo.EvpKDF , B = m.Cipher = D.extend({ cfg: i.extend(), createEncryptor: function(b, c) { return this.create(this._ENC_XFORM_MODE, b, c) }, createDecryptor: function(b, c) { return this.create(this._DEC_XFORM_MODE, b, c) }, init: function(d, e, c) { this.cfg = this.cfg.extend(c); this._xformMode = d; this._key = e; this.reset() }, reset: function() { D.reset.call(this); this._doReset() }, process: function(b) { this._append(b); return this._process() }, finalize: function(b) { b && this._append(b); return this._doFinalize() }, keySize: 4, ivSize: 4, _ENC_XFORM_MODE: 1, _DEC_XFORM_MODE: 2, _createHelper: function(a) { return { encrypt: function(d, c, l) { return ("string" == typeof c ? o : y).encrypt(a, d, c, l) }, decrypt: function(d, c, l) { return ("string" == typeof c ? o : y).decrypt(a, d, c, l) } } } }); m.StreamCipher = B.extend({ _doFinalize: function() { return this._process(!0) }, blockSize: 1 }); var t = j.mode = {} , z = function(l, n, d) { var q = this._iv; q ? this._iv = C : q = this._prevBlock; for (var p = 0; p < d; p++) { l[n + p] ^= q[p] } } , f = (m.BlockCipherMode = i.extend({ createEncryptor: function(b, c) { return this.Encryptor.create(b, c) }, createDecryptor: function(b, c) { return this.Decryptor.create(b, c) }, init: function(b, c) { this._cipher = b; this._iv = c } })).extend(); f.Encryptor = f.extend({ processBlock: function(e, l) { var d = this._cipher , n = d.blockSize; z.call(this, e, l, n); d.encryptBlock(e, l); this._prevBlock = e.slice(l, l + n) } }); f.Decryptor = f.extend({ processBlock: function(n, l) { var r = this._cipher , p = r.blockSize , q = n.slice(l, l + p); r.decryptBlock(n, l); z.call(this, n, l, p); this._prevBlock = q } }); t = t.CBC = f; f = (j.pad = {}).Pkcs7 = { pad: function(q, n) { for (var u = 4 * n, u = u - q.sigBytes % u, r = u << 24 | u << 16 | u << 8 | u, s = [], p = 0; p < u; p += 4) { s.push(r) } u = h.create(s, u); q.concat(u) }, unpad: function(b) { b.sigBytes -= b.words[b.sigBytes - 1 >>> 2] & 255 } }; m.BlockCipher = B.extend({ cfg: B.cfg.extend({ mode: t, padding: f }), reset: function() { B.reset.call(this); var e = this.cfg , l = e.iv , e = e.mode; if (this._xformMode == this._ENC_XFORM_MODE) { var d = e.createEncryptor } else { d = e.createDecryptor, this._minBufferSize = 1 } this._mode = d.call(e, this, l && l.words) }, _doProcessBlock: function(b, d) { this._mode.processBlock(b, d) }, _doFinalize: function() { var b = this.cfg.padding; if (this._xformMode == this._ENC_XFORM_MODE) { b.pad(this._data, this.blockSize); var d = this._process(!0) } else { d = this._process(!0), b.unpad(d) } return d }, blockSize: 4 }); var k = m.CipherParams = i.extend({ init: function(b) { this.mixIn(b) }, toString: function(b) { return (b || this.formatter).stringify(this) } }) , t = (j.format = {}).OpenSSL = { stringify: function(b) { var d = b.ciphertext; b = b.salt; return (b ? h.create([1398893684, 1701076831]).concat(b).concat(d) : d).toString(g) }, parse: function(e) { e = g.parse(e); var l = e.words; if (1398893684 == l[0] && 1701076831 == l[1]) { var d = h.create(l.slice(2, 4)); l.splice(0, 4); e.sigBytes -= 16 } return k.create({ ciphertext: e, salt: d }) } } , y = m.SerializableCipher = i.extend({ cfg: i.extend({ format: t }), encrypt: function(p, r, e, q) { q = this.cfg.extend(q); var n = p.createEncryptor(e, q); r = n.finalize(r); n = n.cfg; return k.create({ ciphertext: r, key: e, iv: n.iv, algorithm: p, mode: n.mode, padding: n.padding, blockSize: p.blockSize, formatter: q.format }) }, decrypt: function(l, p, d, n) { n = this.cfg.extend(n); p = this._parse(p, n.format); return l.createDecryptor(d, n).finalize(p.ciphertext) }, _parse: function(b, d) { return "string" == typeof b ? d.parse(b, this) : b } }) , j = (j.kdf = {}).OpenSSL = { execute: function(l, p, e, n) { n || (n = h.random(8)); l = A.create({ keySize: p + e }).compute(l, n); e = h.create(l.words.slice(p), 4 * e); l.sigBytes = 4 * p; return k.create({ key: l, iv: e, salt: n }) } } , o = m.PasswordBasedCipher = y.extend({ cfg: y.cfg.extend({ kdf: j }), encrypt: function(p, a, l, n) { n = this.cfg.extend(n); l = n.kdf.execute(l, p.keySize, p.ivSize); n.iv = l.iv; p = y.encrypt.call(this, p, a, l.key, n); p.mixIn(l); return p }, decrypt: function(p, a, l, n) { n = this.cfg.extend(n); a = this._parse(a, n.format); l = n.kdf.execute(l, p.keySize, p.ivSize, a.salt); n.iv = l.iv; return y.decrypt.call(this, p, a, l.key, n) } }) }(); (function() { function o(d, l) { var n = (this._lBlock >>> d ^ this._rBlock) & l; this._rBlock ^= n; this._lBlock ^= n << d } function g(d, l) { var n = (this._rBlock >>> d ^ this._lBlock) & l; this._lBlock ^= n; this._rBlock ^= n << d } var h = CryptoJS , f = h.lib , e = f.WordArray , f = f.BlockCipher , t = h.algo , c = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4] , k = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32] , m = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28] , i = [{ "0": 8421888, 268435456: 32768, 536870912: 8421378, 805306368: 2, 1073741824: 512, 1342177280: 8421890, 1610612736: 8389122, 1879048192: 8388608, 2147483648: 514, 2415919104: 8389120, 2684354560: 33280, 2952790016: 8421376, 3221225472: 32770, 3489660928: 8388610, 3758096384: 0, 4026531840: 33282, 134217728: 0, 402653184: 8421890, 671088640: 33282, 939524096: 32768, 1207959552: 8421888, 1476395008: 512, 1744830464: 8421378, 2013265920: 2, 2281701376: 8389120, 2550136832: 33280, 2818572288: 8421376, 3087007744: 8389122, 3355443200: 8388610, 3623878656: 32770, 3892314112: 514, 4160749568: 8388608, 1: 32768, 268435457: 2, 536870913: 8421888, 805306369: 8388608, 1073741825: 8421378, 1342177281: 33280, 1610612737: 512, 1879048193: 8389122, 2147483649: 8421890, 2415919105: 8421376, 2684354561: 8388610, 2952790017: 33282, 3221225473: 514, 3489660929: 8389120, 3758096385: 32770, 4026531841: 0, 134217729: 8421890, 402653185: 8421376, 671088641: 8388608, 939524097: 512, 1207959553: 32768, 1476395009: 8388610, 1744830465: 2, 2013265921: 33282, 2281701377: 32770, 2550136833: 8389122, 2818572289: 514, 3087007745: 8421888, 3355443201: 8389120, 3623878657: 0, 3892314113: 33280, 4160749569: 8421378 }, { "0": 1074282512, 16777216: 16384, 33554432: 524288, 50331648: 1074266128, 67108864: 1073741840, 83886080: 1074282496, 100663296: 1073758208, 117440512: 16, 134217728: 540672, 150994944: 1073758224, 167772160: 1073741824, 184549376: 540688, 201326592: 524304, 218103808: 0, 234881024: 16400, 251658240: 1074266112, 8388608: 1073758208, 25165824: 540688, 41943040: 16, 58720256: 1073758224, 75497472: 1074282512, 92274688: 1073741824, 109051904: 524288, 125829120: 1074266128, 142606336: 524304, 159383552: 0, 176160768: 16384, 192937984: 1074266112, 209715200: 1073741840, 226492416: 540672, 243269632: 1074282496, 260046848: 16400, 268435456: 0, 285212672: 1074266128, 301989888: 1073758224, 318767104: 1074282496, 335544320: 1074266112, 352321536: 16, 369098752: 540688, 385875968: 16384, 402653184: 16400, 419430400: 524288, 436207616: 524304, 452984832: 1073741840, 469762048: 540672, 486539264: 1073758208, 503316480: 1073741824, 520093696: 1074282512, 276824064: 540688, 293601280: 524288, 310378496: 1074266112, 327155712: 16384, 343932928: 1073758208, 360710144: 1074282512, 377487360: 16, 394264576: 1073741824, 411041792: 1074282496, 427819008: 1073741840, 444596224: 1073758224, 461373440: 524304, 478150656: 0, 494927872: 16400, 511705088: 1074266128, 528482304: 540672 }, { "0": 260, 1048576: 0, 2097152: 67109120, 3145728: 65796, 4194304: 65540, 5242880: 67108868, 6291456: 67174660, 7340032: 67174400, 8388608: 67108864, 9437184: 67174656, 10485760: 65792, 11534336: 67174404, 12582912: 67109124, 13631488: 65536, 14680064: 4, 15728640: 256, 524288: 67174656, 1572864: 67174404, 2621440: 0, 3670016: 67109120, 4718592: 67108868, 5767168: 65536, 6815744: 65540, 7864320: 260, 8912896: 4, 9961472: 256, 11010048: 67174400, 12058624: 65796, 13107200: 65792, 14155776: 67109124, 15204352: 67174660, 16252928: 67108864, 16777216: 67174656, 17825792: 65540, 18874368: 65536, 19922944: 67109120, 20971520: 256, 22020096: 67174660, 23068672: 67108868, 24117248: 0, 25165824: 67109124, 26214400: 67108864, 27262976: 4, 28311552: 65792, 29360128: 67174400, 30408704: 260, 31457280: 65796, 32505856: 67174404, 17301504: 67108864, 18350080: 260, 19398656: 67174656, 20447232: 0, 21495808: 65540, 22544384: 67109120, 23592960: 256, 24641536: 67174404, 25690112: 65536, 26738688: 67174660, 27787264: 65796, 28835840: 67108868, 29884416: 67109124, 30932992: 67174400, 31981568: 4, 33030144: 65792 }, { "0": 2151682048, 65536: 2147487808, 131072: 4198464, 196608: 2151677952, 262144: 0, 327680: 4198400, 393216: 2147483712, 458752: 4194368, 524288: 2147483648, 589824: 4194304, 655360: 64, 720896: 2147487744, 786432: 2151678016, 851968: 4160, 917504: 4096, 983040: 2151682112, 32768: 2147487808, 98304: 64, 163840: 2151678016, 229376: 2147487744, 294912: 4198400, 360448: 2151682112, 425984: 0, 491520: 2151677952, 557056: 4096, 622592: 2151682048, 688128: 4194304, 753664: 4160, 819200: 2147483648, 884736: 4194368, 950272: 4198464, 1015808: 2147483712, 1048576: 4194368, 1114112: 4198400, 1179648: 2147483712, 1245184: 0, 1310720: 4160, 1376256: 2151678016, 1441792: 2151682048, 1507328: 2147487808, 1572864: 2151682112, 1638400: 2147483648, 1703936: 2151677952, 1769472: 4198464, 1835008: 2147487744, 1900544: 4194304, 1966080: 64, 2031616: 4096, 1081344: 2151677952, 1146880: 2151682112, 1212416: 0, 1277952: 4198400, 1343488: 4194368, 1409024: 2147483648, 1474560: 2147487808, 1540096: 64, 1605632: 2147483712, 1671168: 4096, 1736704: 2147487744, 1802240: 2151678016, 1867776: 4160, 1933312: 2151682048, 1998848: 4194304, 2064384: 4198464 }, { "0": 128, 4096: 17039360, 8192: 262144, 12288: 536870912, 16384: 537133184, 20480: 16777344, 24576: 553648256, 28672: 262272, 32768: 16777216, 36864: 537133056, 40960: 536871040, 45056: 553910400, 49152: 553910272, 53248: 0, 57344: 17039488, 61440: 553648128, 2048: 17039488, 6144: 553648256, 10240: 128, 14336: 17039360, 18432: 262144, 22528: 537133184, 26624: 553910272, 30720: 536870912, 34816: 537133056, 38912: 0, 43008: 553910400, 47104: 16777344, 51200: 536871040, 55296: 553648128, 59392: 16777216, 63488: 262272, 65536: 262144, 69632: 128, 73728: 536870912, 77824: 553648256, 81920: 16777344, 86016: 553910272, 90112: 537133184, 94208: 16777216, 98304: 553910400, 102400: 553648128, 106496: 17039360, 110592: 537133056, 114688: 262272, 118784: 536871040, 122880: 0, 126976: 17039488, 67584: 553648256, 71680: 16777216, 75776: 17039360, 79872: 537133184, 83968: 536870912, 88064: 17039488, 92160: 128, 96256: 553910272, 100352: 262272, 104448: 553910400, 108544: 0, 112640: 553648128, 116736: 16777344, 120832: 262144, 124928: 537133056, 129024: 536871040 }, { "0": 268435464, 256: 8192, 512: 270532608, 768: 270540808, 1024: 268443648, 1280: 2097152, 1536: 2097160, 1792: 268435456, 2048: 0, 2304: 268443656, 2560: 2105344, 2816: 8, 3072: 270532616, 3328: 2105352, 3584: 8200, 3840: 270540800, 128: 270532608, 384: 270540808, 640: 8, 896: 2097152, 1152: 2105352, 1408: 268435464, 1664: 268443648, 1920: 8200, 2176: 2097160, 2432: 8192, 2688: 268443656, 2944: 270532616, 3200: 0, 3456: 270540800, 3712: 2105344, 3968: 268435456, 4096: 268443648, 4352: 270532616, 4608: 270540808, 4864: 8200, 5120: 2097152, 5376: 268435456, 5632: 268435464, 5888: 2105344, 6144: 2105352, 6400: 0, 6656: 8, 6912: 270532608, 7168: 8192, 7424: 268443656, 7680: 270540800, 7936: 2097160, 4224: 8, 4480: 2105344, 4736: 2097152, 4992: 268435464, 5248: 268443648, 5504: 8200, 5760: 270540808, 6016: 270532608, 6272: 270540800, 6528: 270532616, 6784: 8192, 7040: 2105352, 7296: 2097160, 7552: 0, 7808: 268435456, 8064: 268443656 }, { "0": 1048576, 16: 33555457, 32: 1024, 48: 1049601, 64: 34604033, 80: 0, 96: 1, 112: 34603009, 128: 33555456, 144: 1048577, 160: 33554433, 176: 34604032, 192: 34603008, 208: 1025, 224: 1049600, 240: 33554432, 8: 34603009, 24: 0, 40: 33555457, 56: 34604032, 72: 1048576, 88: 33554433, 104: 33554432, 120: 1025, 136: 1049601, 152: 33555456, 168: 34603008, 184: 1048577, 200: 1024, 216: 34604033, 232: 1, 248: 1049600, 256: 33554432, 272: 1048576, 288: 33555457, 304: 34603009, 320: 1048577, 336: 33555456, 352: 34604032, 368: 1049601, 384: 1025, 400: 34604033, 416: 1049600, 432: 1, 448: 0, 464: 34603008, 480: 33554433, 496: 1024, 264: 1049600, 280: 33555457, 296: 34603009, 312: 1, 328: 33554432, 344: 1048576, 360: 1025, 376: 34604032, 392: 33554433, 408: 34603008, 424: 0, 440: 34604033, 456: 1049601, 472: 1024, 488: 33555456, 504: 1048577 }, { "0": 134219808, 1: 131072, 2: 134217728, 3: 32, 4: 131104, 5: 134350880, 6: 134350848, 7: 2048, 8: 134348800, 9: 134219776, 10: 133120, 11: 134348832, 12: 2080, 13: 0, 14: 134217760, 15: 133152, 2147483648: 2048, 2147483649: 134350880, 2147483650: 134219808, 2147483651: 134217728, 2147483652: 134348800, 2147483653: 133120, 2147483654: 133152, 2147483655: 32, 2147483656: 134217760, 2147483657: 2080, 2147483658: 131104, 2147483659: 134350848, 2147483660: 0, 2147483661: 134348832, 2147483662: 134219776, 2147483663: 131072, 16: 133152, 17: 134350848, 18: 32, 19: 2048, 20: 134219776, 21: 134217760, 22: 134348832, 23: 131072, 24: 0, 25: 131104, 26: 134348800, 27: 134219808, 28: 134350880, 29: 133120, 30: 2080, 31: 134217728, 2147483664: 131072, 2147483665: 2048, 2147483666: 134348832, 2147483667: 133152, 2147483668: 32, 2147483669: 134348800, 2147483670: 134217728, 2147483671: 134219808, 2147483672: 134350880, 2147483673: 134217760, 2147483674: 134219776, 2147483675: 0, 2147483676: 133120, 2147483677: 2080, 2147483678: 131104, 2147483679: 134350848 }] , j = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679] , a = t.DES = f.extend({ _doReset: function() { for (var n = this._key.words, q = [], u = 0; 56 > u; u++) { var s = c[u] - 1; q[u] = n[s >>> 5] >>> 31 - s % 32 & 1 } n = this._subKeys = []; for (s = 0; 16 > s; s++) { for (var r = n[s] = [], p = m[s], u = 0; 24 > u; u++) { r[u / 6 | 0] |= q[(k[u] - 1 + p) % 28] << 31 - u % 6, r[4 + (u / 6 | 0)] |= q[28 + (k[u + 24] - 1 + p) % 28] << 31 - u % 6 } r[0] = r[0] << 1 | r[0] >>> 31; for (u = 1; 7 > u; u++) { r[u] >>>= 4 * (u - 1) + 3 } r[7] = r[7] << 5 | r[7] >>> 27 } q = this._invSubKeys = []; for (u = 0; 16 > u; u++) { q[u] = n[15 - u] } }, encryptBlock: function(d, l) { this._doCryptBlock(d, l, this._subKeys) }, decryptBlock: function(d, l) { this._doCryptBlock(d, l, this._invSubKeys) }, _doCryptBlock: function(w, z, y) { this._lBlock = w[z]; this._rBlock = w[z + 1]; o.call(this, 4, 252645135); o.call(this, 16, 65535); g.call(this, 2, 858993459); g.call(this, 8, 16711935); o.call(this, 1, 1431655765); for (var x = 0; 16 > x; x++) { for (var v = y[x], u = this._lBlock, s = this._rBlock, l = 0, b = 0; 8 > b; b++) { l |= i[b][((s ^ v[b]) & j[b]) >>> 0] } this._lBlock = s; this._rBlock = u ^ l } y = this._lBlock; this._lBlock = this._rBlock; this._rBlock = y; o.call(this, 1, 1431655765); g.call(this, 8, 16711935); g.call(this, 2, 858993459); o.call(this, 16, 65535); o.call(this, 4, 252645135); w[z] = this._lBlock; w[z + 1] = this._rBlock }, keySize: 2, ivSize: 2, blockSize: 2 }); h.DES = f._createHelper(a); t = t.TripleDES = f.extend({ _doReset: function() { var d = this._key.words; this._des1 = a.createEncryptor(e.create(d.slice(0, 2))); this._des2 = a.createEncryptor(e.create(d.slice(2, 4))); this._des3 = a.createEncryptor(e.create(d.slice(4, 6))) }, encryptBlock: function(d, l) { this._des1.encryptBlock(d, l); this._des2.decryptBlock(d, l); this._des3.encryptBlock(d, l) }, decryptBlock: function(d, l) { this._des3.decryptBlock(d, l); this._des2.encryptBlock(d, l); this._des1.decryptBlock(d, l) }, keySize: 6, ivSize: 2, blockSize: 2 }); h.TripleDES = f._createHelper(t) } )();
View Code-CryptoJS
1-2原代码处部分需要更改,以红字标明
var DES3 = { iv: function() { return $.WebSite.formatDate(new Date(), "yyyyMMdd")//算出其实就是日期类似:20221117此种类型,用其它简单原生代码代替 }, encrypt: function(b, c, a) { if (c) { return (CryptoJS.TripleDES.encrypt(b, CryptoJS.enc.Utf8.parse(c), { iv: CryptoJS.enc.Utf8.parse(a || DES3.iv()), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })).toString() } return "" }, decrypt: function(b, c, a) { if (c) { return CryptoJS.enc.Utf8.stringify(CryptoJS.TripleDES.decrypt(b, CryptoJS.enc.Utf8.parse(c), { iv: CryptoJS.enc.Utf8.parse(a || DES3.iv()), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })).toString() } return "" } };
1-3代替函数及修改之后的代码
function dateFormat(fmt, date) { let ret; const opt = { "Y+": date.getFullYear().toString(), // 年 "m+": (date.getMonth() + 1).toString(), // 月 "d+": date.getDate().toString(), // 日 "H+": date.getHours().toString(), // 时 "M+": date.getMinutes().toString(), // 分 "S+": date.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 }; for (let k in opt) { ret = new RegExp("(" + k + ")").exec(fmt); if (ret) { fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0"))) }; }; return fmt; } var DES3 = { iv: function() { let date = new Date() return dateFormat("YYYYmmdd", date)//替换为自己js的原生代码,处理报错问题 //return $.WebSite.formatDate(new Date(), "yyyyMMdd") }, encrypt: function(b, c, a) { if (c) { return (CryptoJS.TripleDES.encrypt(b, CryptoJS.enc.Utf8.parse(c), { iv: CryptoJS.enc.Utf8.parse(a || DES3.iv()), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })).toString() } return "" }, decrypt: function(b, c, a) { if (c) { return CryptoJS.enc.Utf8.stringify(CryptoJS.TripleDES.decrypt(b, CryptoJS.enc.Utf8.parse(c), { iv: CryptoJS.enc.Utf8.parse(a || DES3.iv()), mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 })).toString() } return "" } };
1-4测试语句(语句较长):
console.log(DES3.decrypt("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","ELOOwB2ZUd68fWkmkHtbu3OK"));
测试如图
2-1提交方法里面看到还有一个010101一堆的参数加密,解$.WebSite.random(24);->原代码
function cipher() { var date = new Date(); var timestamp = date.getTime().toString(); var salt = $.WebSite.random(24);//此处在控制台输出的是一个随机的24位字符串,直接自行生成 var year = date.getFullYear().toString(); var month = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date .getMonth()).toString(); var day = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) .toString(); var iv = year + month + day; var enc = DES3.encrypt(timestamp, salt, iv).toString(); var str = salt + iv + enc; var ciphertext = strTobinary(str); return ciphertext; }
2-2 生成及替换cipher函数->如代码
function strTobinary(str) { var result = []; var list = str.split(""); for (var i = 0; i < list.length; i++) { if (i != 0) { result.push(" "); } var item = list[i]; var binaryStr = item.charCodeAt().toString(2); result.push(binaryStr); }; return result.join("");
组合上面的代码,就是参数cipher参数加密的过程
function randomString(e) { e = e || 32; var t = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz1234567890", a = t.length, n = ""; for (i = 0; i < e; i++) n += t.charAt(Math.floor(Math.random() * a)); return n } function cipher() { var date = new Date(); var timestamp = date.getTime().toString(); var salt = randomString(24);//此处进行的更改,其它不变,后面会引用别的 var year = date.getFullYear().toString(); var month = (date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date .getMonth()).toString(); var day = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) .toString(); var iv = year + month + day; var enc = DES3.encrypt(timestamp, salt, iv).toString(); var str = salt + iv + enc; var ciphertext = strTobinary(str); return ciphertext; }
2-3 爬取此文书网不难,难度在文书网一言不合就出wtf的频繁,这个比较麻烦
原文地址:http://www.cnblogs.com/Skyda/p/16898158.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性