爬虫逆向实战(十九)--某号站登录

一、数据接口分析

主页地址:某号站

1、抓包

通过抓包可以发现登录接口
在这里插入图片描述

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看“载荷”模块可以发现有一个jsondata_rsa的加密参数
    在这里插入图片描述
  2. 请求头是否加密?
  3. 响应是否加密?
  4. cookie是否加密?

二、加密位置定位

1、看启动器

查看启动器发现里面有一个LoginNow的调用,点进去查看
在这里插入图片描述
点进去后发现,此处就是发送ajax请求的位置,并且jsondata_rsa参数的加密就在上方
在这里插入图片描述

三、扣js代码

将定位到加密位置的代码抠出,缺啥补啥即可
但是,其中还有一个vvccookie参数和一个blackbox参数,他们分别取的是html中#vvccookie#ioBB两个input元素的值。其中#vvccookie直接请求html,返回的html中就包含了,但是#ioBB在返回的html中却没有值。通过搜索关键字的方式,找到了#ioBB值的生成位置。
在这里插入图片描述
但是我没有看懂他是怎么生成的,刷新了几次页面,发现这个值是一样的,我就写死了。如果有大佬知道是怎么生成的,可以私信或者评论教我一下。
JavaScript源码:

var navigator = {}
navigator.appName = 'Netscape'function Arcfour() {this.i = 0;this.j = 0;this.S = new Array();
}// Initialize arcfour context from key, an array of ints, each from [0..255]
function ARC4init(key) {var i, j, t;for (i = 0; i < 256; ++i)this.S[i] = i;j = 0;for (i = 0; i < 256; ++i) {j = (j + this.S[i] + key[i % key.length]) & 255;t = this.S[i];this.S[i] = this.S[j];this.S[j] = t;}this.i = 0;this.j = 0;
}function ARC4next() {var t;this.i = (this.i + 1) & 255;this.j = (this.j + this.S[this.i]) & 255;t = this.S[this.i];this.S[this.i] = this.S[this.j];this.S[this.j] = t;return this.S[(t + this.S[this.i]) & 255];
}Arcfour.prototype.init = ARC4init;
Arcfour.prototype.next = ARC4next;// Plug in your RNG constructor here
function prng_newstate() {return new Arcfour();
}// Pool size must be a multiple of 4 and greater than 32.
// An array of bytes the size of the pool will be passed to init()
var rng_psize = 256;var rng_state;
var rng_pool;
var rng_pptr;// Mix in a 32-bit integer into the pool
function rng_seed_int(x) {rng_pool[rng_pptr++] ^= x & 255;rng_pool[rng_pptr++] ^= (x >> 8) & 255;rng_pool[rng_pptr++] ^= (x >> 16) & 255;rng_pool[rng_pptr++] ^= (x >> 24) & 255;if (rng_pptr >= rng_psize) rng_pptr -= rng_psize;
}// Mix in the current time (w/milliseconds) into the pool
function rng_seed_time() {rng_seed_int(new Date().getTime());
}// Initialize the pool with junk if needed.
if (rng_pool == null) {rng_pool = new Array();rng_pptr = 0;var t;if (navigator.appName == "Netscape" && navigator.appVersion < "5" && window.crypto) {// Extract entropy (256 bits) from NS4 RNG if availablevar z = window.crypto.random(32);for (t = 0; t < z.length; ++t)rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;}while (rng_pptr < rng_psize) {  // extract some randomness from Math.random()t = Math.floor(65536 * Math.random());rng_pool[rng_pptr++] = t >>> 8;rng_pool[rng_pptr++] = t & 255;}rng_pptr = 0;rng_seed_time();//rng_seed_int(window.screenX);//rng_seed_int(window.screenY);
}function rng_get_byte() {if (rng_state == null) {rng_seed_time();rng_state = prng_newstate();rng_state.init(rng_pool);for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)rng_pool[rng_pptr] = 0;rng_pptr = 0;//rng_pool = null;}// TODO: allow reseeding after first requestreturn rng_state.next();
}function rng_get_bytes(ba) {var i;for (i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();
}function SecureRandom() {
}SecureRandom.prototype.nextBytes = rng_get_bytes;// Bits per digit
var dbits;// JavaScript engine analysis
var canary = 0xdeadbeefcafe;
var j_lm = ((canary & 0xffffff) == 0xefcafe);// (public) Constructor
function BigInteger(a, b, c) {if (a != null)if ("number" == typeof a) this.fromNumber(a, b, c);else if (b == null && "string" != typeof a) this.fromString(a, 256);else this.fromString(a, b);
}// return new, unset BigInteger
function nbi() {return new BigInteger(null);
}// am: Compute w_j += (x*this_i), propagate carries,
// c is initial carry, returns final carry.
// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
// We need to select the fastest one that works in this environment.// am1: use a single mult and divide to get the high bits,
// max digit bits should be 26 because
// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
function am1(i, x, w, j, c, n) {while (--n >= 0) {var v = x * this[i++] + w[j] + c;c = Math.floor(v / 0x4000000);w[j++] = v & 0x3ffffff;}return c;
}// am2 avoids a big mult-and-extract completely.
// Max digit bits should be <= 30 because we do bitwise ops
// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
function am2(i, x, w, j, c, n) {var xl = x & 0x7fff, xh = x >> 15;while (--n >= 0) {var l = this[i] & 0x7fff;var h = this[i++] >> 15;var m = xh * l + h * xl;l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);w[j++] = l & 0x3fffffff;}return c;
}// Alternately, set max digit bits to 28 since some
// browsers slow down when dealing with 32-bit numbers.
function am3(i, x, w, j, c, n) {var xl = x & 0x3fff, xh = x >> 14;while (--n >= 0) {var l = this[i] & 0x3fff;var h = this[i++] >> 14;var m = xh * l + h * xl;l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;c = (l >> 28) + (m >> 14) + xh * h;w[j++] = l & 0xfffffff;}return c;
}if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) {BigInteger.prototype.am = am2;dbits = 30;
} else if (j_lm && (navigator.appName != "Netscape")) {BigInteger.prototype.am = am1;dbits = 26;
} else { // Mozilla/Netscape seems to prefer am3BigInteger.prototype.am = am3;dbits = 28;
}BigInteger.prototype.DB = dbits;
BigInteger.prototype.DM = ((1 << dbits) - 1);
BigInteger.prototype.DV = (1 << dbits);var BI_FP = 52;
BigInteger.prototype.FV = Math.pow(2, BI_FP);
BigInteger.prototype.F1 = BI_FP - dbits;
BigInteger.prototype.F2 = 2 * dbits - BI_FP;// Digit conversions
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
var BI_RC = new Array();
var rr, vv;
rr = "0".charCodeAt(0);
for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
rr = "a".charCodeAt(0);
for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
rr = "A".charCodeAt(0);
for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;function int2char(n) {return BI_RM.charAt(n);
}function intAt(s, i) {var c = BI_RC[s.charCodeAt(i)];return (c == null) ? -1 : c;
}// (protected) copy this to r
function bnpCopyTo(r) {for (var i = this.t - 1; i >= 0; --i) r[i] = this[i];r.t = this.t;r.s = this.s;
}// (protected) set from integer value x, -DV <= x < DV
function bnpFromInt(x) {this.t = 1;this.s = (x < 0) ? -1 : 0;if (x > 0) this[0] = x;else if (x < -1) this[0] = x + DV;else this.t = 0;
}// return bigint initialized to value
function nbv(i) {var r = nbi();r.fromInt(i);return r;
}// (protected) set from string and radix
function bnpFromString(s, b) {var k;if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 256) k = 8; // byte arrayelse if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else {this.fromRadix(s, b);return;}this.t = 0;this.s = 0;var i = s.length, mi = false, sh = 0;while (--i >= 0) {var x = (k == 8) ? s[i] & 0xff : intAt(s, i);if (x < 0) {if (s.charAt(i) == "-") mi = true;continue;}mi = false;if (sh == 0)this[this.t++] = x;else if (sh + k > this.DB) {this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;this[this.t++] = (x >> (this.DB - sh));} elsethis[this.t - 1] |= x << sh;sh += k;if (sh >= this.DB) sh -= this.DB;}if (k == 8 && (s[0] & 0x80) != 0) {this.s = -1;if (sh > 0) this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;}this.clamp();if (mi) BigInteger.ZERO.subTo(this, this);
}// (protected) clamp off excess high words
function bnpClamp() {var c = this.s & this.DM;while (this.t > 0 && this[this.t - 1] == c) --this.t;
}// (public) return string representation in given radix
function bnToString(b) {if (this.s < 0) return "-" + this.negate().toString(b);var k;if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else return this.toRadix(b);var km = (1 << k) - 1, d, m = false, r = "", i = this.t;var p = this.DB - (i * this.DB) % k;if (i-- > 0) {if (p < this.DB && (d = this[i] >> p) > 0) {m = true;r = int2char(d);}while (i >= 0) {if (p < k) {d = (this[i] & ((1 << p) - 1)) << (k - p);d |= this[--i] >> (p += this.DB - k);} else {d = (this[i] >> (p -= k)) & km;if (p <= 0) {p += this.DB;--i;}}if (d > 0) m = true;if (m) r += int2char(d);}}return m ? r : "0";
}// (public) -this
function bnNegate() {var r = nbi();BigInteger.ZERO.subTo(this, r);return r;
}// (public) |this|
function bnAbs() {return (this.s < 0) ? this.negate() : this;
}// (public) return + if this > a, - if this < a, 0 if equal
function bnCompareTo(a) {var r = this.s - a.s;if (r != 0) return r;var i = this.t;r = i - a.t;if (r != 0) return r;while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r;return 0;
}// returns bit length of the integer x
function nbits(x) {var r = 1, t;if ((t = x >>> 16) != 0) {x = t;r += 16;}if ((t = x >> 8) != 0) {x = t;r += 8;}if ((t = x >> 4) != 0) {x = t;r += 4;}if ((t = x >> 2) != 0) {x = t;r += 2;}if ((t = x >> 1) != 0) {x = t;r += 1;}return r;
}// (public) return the number of bits in "this"
function bnBitLength() {if (this.t <= 0) return 0;return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));
}// (protected) r = this << n*DB
function bnpDLShiftTo(n, r) {var i;for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i];for (i = n - 1; i >= 0; --i) r[i] = 0;r.t = this.t + n;r.s = this.s;
}// (protected) r = this >> n*DB
function bnpDRShiftTo(n, r) {for (var i = n; i < this.t; ++i) r[i - n] = this[i];r.t = Math.max(this.t - n, 0);r.s = this.s;
}// (protected) r = this << n
function bnpLShiftTo(n, r) {var bs = n % this.DB;var cbs = this.DB - bs;var bm = (1 << cbs) - 1;var ds = Math.floor(n / this.DB), c = (this.s << bs) & this.DM, i;for (i = this.t - 1; i >= 0; --i) {r[i + ds + 1] = (this[i] >> cbs) | c;c = (this[i] & bm) << bs;}for (i = ds - 1; i >= 0; --i) r[i] = 0;r[ds] = c;r.t = this.t + ds + 1;r.s = this.s;r.clamp();
}// (protected) r = this >> n
function bnpRShiftTo(n, r) {r.s = this.s;var ds = Math.floor(n / this.DB);if (ds >= this.t) {r.t = 0;return;}var bs = n % this.DB;var cbs = this.DB - bs;var bm = (1 << bs) - 1;r[0] = this[ds] >> bs;for (var i = ds + 1; i < this.t; ++i) {r[i - ds - 1] |= (this[i] & bm) << cbs;r[i - ds] = this[i] >> bs;}if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;r.t = this.t - ds;r.clamp();
}// (protected) r = this - a
function bnpSubTo(a, r) {var i = 0, c = 0, m = Math.min(a.t, this.t);while (i < m) {c += this[i] - a[i];r[i++] = c & this.DM;c >>= this.DB;}if (a.t < this.t) {c -= a.s;while (i < this.t) {c += this[i];r[i++] = c & this.DM;c >>= this.DB;}c += this.s;} else {c += this.s;while (i < a.t) {c -= a[i];r[i++] = c & this.DM;c >>= this.DB;}c -= a.s;}r.s = (c < 0) ? -1 : 0;if (c < -1) r[i++] = this.DV + c;else if (c > 0) r[i++] = c;r.t = i;r.clamp();
}// (protected) r = this * a, r != this,a (HAC 14.12)
// "this" should be the larger one if appropriate.
function bnpMultiplyTo(a, r) {var x = this.abs(), y = a.abs();var i = x.t;r.t = i + y.t;while (--i >= 0) r[i] = 0;for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);r.s = 0;r.clamp();if (this.s != a.s) BigInteger.ZERO.subTo(r, r);
}// (protected) r = this^2, r != this (HAC 14.16)
function bnpSquareTo(r) {var x = this.abs();var i = r.t = 2 * x.t;while (--i >= 0) r[i] = 0;for (i = 0; i < x.t - 1; ++i) {var c = x.am(i, x[i], r, 2 * i, 0, 1);if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {r[i + x.t] -= x.DV;r[i + x.t + 1] = 1;}}if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);r.s = 0;r.clamp();
}// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
// r != q, this != m.  q or r may be null.
function bnpDivRemTo(m, q, r) {var pm = m.abs();if (pm.t <= 0) return;var pt = this.abs();if (pt.t < pm.t) {if (q != null) q.fromInt(0);if (r != null) this.copyTo(r);return;}if (r == null) r = nbi();var y = nbi(), ts = this.s, ms = m.s;var nsh = this.DB - nbits(pm[pm.t - 1]);	// normalize modulusif (nsh > 0) {pm.lShiftTo(nsh, y);pt.lShiftTo(nsh, r);} else {pm.copyTo(y);pt.copyTo(r);}var ys = y.t;var y0 = y[ys - 1];if (y0 == 0) return;var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);var d1 = this.FV / yt, d2 = (1 << this.F1) / yt, e = 1 << this.F2;var i = r.t, j = i - ys, t = (q == null) ? nbi() : q;y.dlShiftTo(j, t);if (r.compareTo(t) >= 0) {r[r.t++] = 1;r.subTo(t, r);}BigInteger.ONE.dlShiftTo(ys, t);t.subTo(y, y);	// "negative" y so we can replace sub with am laterwhile (y.t < ys) y[y.t++] = 0;while (--j >= 0) {// Estimate quotient digitvar qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {	// Try it outy.dlShiftTo(j, t);r.subTo(t, r);while (r[i] < --qd) r.subTo(t, r);}}if (q != null) {r.drShiftTo(ys, q);if (ts != ms) BigInteger.ZERO.subTo(q, q);}r.t = ys;r.clamp();if (nsh > 0) r.rShiftTo(nsh, r);	// Denormalize remainderif (ts < 0) BigInteger.ZERO.subTo(r, r);
}// (public) this mod a
function bnMod(a) {var r = nbi();this.abs().divRemTo(a, null, r);if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);return r;
}// Modular reduction using "classic" algorithm
function Classic(m) {this.m = m;
}function cConvert(x) {if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);else return x;
}function cRevert(x) {return x;
}function cReduce(x) {x.divRemTo(this.m, null, x);
}function cMulTo(x, y, r) {x.multiplyTo(y, r);this.reduce(r);
}function cSqrTo(x, r) {x.squareTo(r);this.reduce(r);
}Classic.prototype.convert = cConvert;
Classic.prototype.revert = cRevert;
Classic.prototype.reduce = cReduce;
Classic.prototype.mulTo = cMulTo;
Classic.prototype.sqrTo = cSqrTo;// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
// justification:
//         xy == 1 (mod m)
//         xy =  1+km
//   xy(2-xy) = (1+km)(1-km)
// x[y(2-xy)] = 1-k^2m^2
// x[y(2-xy)] == 1 (mod m^2)
// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
// JS multiply "overflows" differently from C/C++, so care is needed here.
function bnpInvDigit() {if (this.t < 1) return 0;var x = this[0];if ((x & 1) == 0) return 0;var y = x & 3;		// y == 1/x mod 2^2y = (y * (2 - (x & 0xf) * y)) & 0xf;	// y == 1/x mod 2^4y = (y * (2 - (x & 0xff) * y)) & 0xff;	// y == 1/x mod 2^8y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff;	// y == 1/x mod 2^16// last step - calculate inverse mod DV directly;// assumes 16 < DB <= 32 and assumes ability to handle 48-bit intsy = (y * (2 - x * y % this.DV)) % this.DV;		// y == 1/x mod 2^dbits// we really want the negative inverse, and -DV < y < DVreturn (y > 0) ? this.DV - y : -y;
}// Montgomery reduction
function Montgomery(m) {this.m = m;this.mp = m.invDigit();this.mpl = this.mp & 0x7fff;this.mph = this.mp >> 15;this.um = (1 << (m.DB - 15)) - 1;this.mt2 = 2 * m.t;
}// xR mod m
function montConvert(x) {var r = nbi();x.abs().dlShiftTo(this.m.t, r);r.divRemTo(this.m, null, r);if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);return r;
}// x/R mod m
function montRevert(x) {var r = nbi();x.copyTo(r);this.reduce(r);return r;
}// x = x/R mod m (HAC 14.32)
function montReduce(x) {while (x.t <= this.mt2)	// pad x so am has enough room laterx[x.t++] = 0;for (var i = 0; i < this.m.t; ++i) {// faster way of calculating u0 = x[i]*mp mod DVvar j = x[i] & 0x7fff;var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;// use am to combine the multiply-shift-add into one callj = i + this.m.t;x[j] += this.m.am(0, u0, x, i, 0, this.m.t);// propagate carrywhile (x[j] >= x.DV) {x[j] -= x.DV;x[++j]++;}}x.clamp();x.drShiftTo(this.m.t, x);if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);
}// r = "x^2/R mod m"; x != r
function montSqrTo(x, r) {x.squareTo(r);this.reduce(r);
}// r = "xy/R mod m"; x,y != r
function montMulTo(x, y, r) {x.multiplyTo(y, r);this.reduce(r);
}Montgomery.prototype.convert = montConvert;
Montgomery.prototype.revert = montRevert;
Montgomery.prototype.reduce = montReduce;
Montgomery.prototype.mulTo = montMulTo;
Montgomery.prototype.sqrTo = montSqrTo;// (protected) true iff this is even
function bnpIsEven() {return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;
}// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
function bnpExp(e, z) {if (e > 0xffffffff || e < 1) return BigInteger.ONE;var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e) - 1;g.copyTo(r);while (--i >= 0) {z.sqrTo(r, r2);if ((e & (1 << i)) > 0) z.mulTo(r2, g, r);else {var t = r;r = r2;r2 = t;}}return z.revert(r);
}// (public) this^e % m, 0 <= e < 2^32
function bnModPowInt(e, m) {var z;if (e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);return this.exp(e, z);
}// protected
BigInteger.prototype.copyTo = bnpCopyTo;
BigInteger.prototype.fromInt = bnpFromInt;
BigInteger.prototype.fromString = bnpFromString;
BigInteger.prototype.clamp = bnpClamp;
BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
BigInteger.prototype.drShiftTo = bnpDRShiftTo;
BigInteger.prototype.lShiftTo = bnpLShiftTo;
BigInteger.prototype.rShiftTo = bnpRShiftTo;
BigInteger.prototype.subTo = bnpSubTo;
BigInteger.prototype.multiplyTo = bnpMultiplyTo;
BigInteger.prototype.squareTo = bnpSquareTo;
BigInteger.prototype.divRemTo = bnpDivRemTo;
BigInteger.prototype.invDigit = bnpInvDigit;
BigInteger.prototype.isEven = bnpIsEven;
BigInteger.prototype.exp = bnpExp;// public
BigInteger.prototype.toString = bnToString;
BigInteger.prototype.negate = bnNegate;
BigInteger.prototype.abs = bnAbs;
BigInteger.prototype.compareTo = bnCompareTo;
BigInteger.prototype.bitLength = bnBitLength;
BigInteger.prototype.mod = bnMod;
BigInteger.prototype.modPowInt = bnModPowInt;// "constants"
BigInteger.ZERO = nbv(0);
BigInteger.ONE = nbv(1);var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var b64pad = "=";function hex2b64(h) {var i;var c;var ret = "";for (i = 0; i + 3 <= h.length; i += 3) {c = parseInt(h.substring(i, i + 3), 16);ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);}if (i + 1 == h.length) {c = parseInt(h.substring(i, i + 1), 16);ret += b64map.charAt(c << 2);} else if (i + 2 == h.length) {c = parseInt(h.substring(i, i + 2), 16);ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);}while ((ret.length & 3) > 0) ret += b64pad;return ret;
}// convert a base64 string to hex
function b64tohex(s) {var ret = ""var i;var k = 0; // b64 state, 0-3var slop;for (i = 0; i < s.length; ++i) {if (s.charAt(i) == b64pad) break;v = b64map.indexOf(s.charAt(i));if (v < 0) continue;if (k == 0) {ret += int2char(v >> 2);slop = v & 3;k = 1;} else if (k == 1) {ret += int2char((slop << 2) | (v >> 4));slop = v & 0xf;k = 2;} else if (k == 2) {ret += int2char(slop);ret += int2char(v >> 2);slop = v & 3;k = 3;} else {ret += int2char((slop << 2) | (v >> 4));ret += int2char(v & 0xf);k = 0;}}if (k == 1)ret += int2char(slop << 2);return ret;
}// convert a base64 string to a byte/number array
function b64toBA(s) {//piggyback on b64tohex for now, optimize latervar h = b64tohex(s);var i;var a = new Array();for (i = 0; 2 * i < h.length; ++i) {a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);}return a;
}// Depends on jsbn.js and rng.js// Version 1.1: support utf-8 encoding in pkcs1pad2// convert a (hex) string to a bignum object
function parseBigInt(str, r) {return new BigInteger(str, r);
}function linebrk(s, n) {var ret = "";var i = 0;while (i + n < s.length) {ret += s.substring(i, i + n) + "\n";i += n;}return ret + s.substring(i, s.length);
}function byte2Hex(b) {if (b < 0x10)return "0" + b.toString(16);elsereturn b.toString(16);
}// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint
function pkcs1pad2(s, n) {if (n < s.length + 11) { // TODO: fix for utf-8alert("Message too long for RSA");return null;}var ba = new Array();var i = s.length - 1;while (i >= 0 && n > 0) {var c = s.charCodeAt(i--);if (c < 128) { // encode using utf-8ba[--n] = c;} else if ((c > 127) && (c < 2048)) {ba[--n] = (c & 63) | 128;ba[--n] = (c >> 6) | 192;} else {ba[--n] = (c & 63) | 128;ba[--n] = ((c >> 6) & 63) | 128;ba[--n] = (c >> 12) | 224;}}ba[--n] = 0;var rng = new SecureRandom();var x = new Array();while (n > 2) { // random non-zero padx[0] = 0;while (x[0] == 0) rng.nextBytes(x);ba[--n] = x[0];}ba[--n] = 2;ba[--n] = 0;return new BigInteger(ba);
}// "empty" RSA key constructor
function RSAKey() {this.n = null;this.e = 0;this.d = null;this.p = null;this.q = null;this.dmp1 = null;this.dmq1 = null;this.coeff = null;
}// Set the public key fields N and e from hex strings
function RSASetPublic(N, E) {if (N != null && E != null && N.length > 0 && E.length > 0) {this.n = parseBigInt(N, 16);this.e = parseInt(E, 16);} elsealert("Invalid RSA public key");
}// Perform raw public operation on "x": return x^e (mod n)
function RSADoPublic(x) {return x.modPowInt(this.e, this.n);
}// Return the PKCS#1 RSA encryption of "text" as an even-length hex string
function RSAEncrypt(text) {var m = pkcs1pad2(text, (this.n.bitLength() + 7) >> 3);if (m == null) return null;var c = this.doPublic(m);if (c == null) return null;var h = c.toString(16);if ((h.length & 1) == 0) return h; else return "0" + h;
}// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string
//function RSAEncryptB64(text) {
//  var h = this.encrypt(text);
//  if(h) return hex2b64(h); else return null;
//}// protected
RSAKey.prototype.doPublic = RSADoPublic;// public
RSAKey.prototype.setPublic = RSASetPublic;
RSAKey.prototype.encrypt = RSAEncrypt;
//RSAKey.prototype.encrypt_b64 = RSAEncryptB64;var public_key = "B0AAFA4C9D388208E9F55B14DF04C8603D0CD81B7B65BBD669FA893096C985E33682FE7DEEE6500E1C4C6722C9855B6DD2E130F3672BEBA446B72D8DFFF2DD1F4E23D6BD728E267A9DC2C544C6680712884926D67AF74B74E5AD8298034D8C16FE8E5A37706EF5E447E423E69CA7FD3E47BBF7A9B137EF9B0310E2560E13D3C1";
var public_length = "10001";function rsa_encrypt(str) {var BLOCK_SIZE = public_key.length / 2 - 11;var ret = '';while (str.length > 0) {var i = BLOCK_SIZE;if (str.length < i) i = str.length;str_1 = str.substr(0, i);str = str.substr(i, str.length - i);ret += rsa_encrypt1(str_1) + ' ';}return (ret);
}function rsa_encrypt1(str) {var rsa = new RSAKey();rsa.setPublic(public_key, public_length);var res = rsa.encrypt(str);res = hex2b64(res);return (res);
}var CryptoJS = require('crypto-js')function get_param(username, password, code, vvccookie, blackbox) {jsondata_rsa = {"username": username,"loginpass": password,"code": CryptoJS.MD5(code).toString(),"vvccookie": vvccookie,"blackbox": blackbox}return  rsa_encrypt(JSON.stringify(jsondata_rsa));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/47235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【报错】yarn --version Unrecognized option: --version Error...

文章目录 问题分析解决问题 在使用 npm install -g yarn 全局安装 yarn 后,查看yarn 的版本号,报错如下 PS D:\global-data-display> yarn --version Unrecognized option: --version Error: Could

数据结构---串(赋值,求子串,比较,定位)

目录 一.初始化 顺序表中串的存储 串的链式存储 二.赋值操作&#xff1a;将str赋值给S 链式表 顺序表 三.复制操作&#xff1a;将chars复制到str中 链式表 顺序表 四.判空操作 链式表 顺序表 五.清空操作 六.串联结 链式表 顺序表 七.求子串 链式表 顺序表…

掌握AI助手的魔法工具:解密Prompt(提示)在AIGC时代的应用「上篇」

在当今的AIGC时代&#xff0c;我们面临着越来越多的人工智能技术和应用。其中一个引人注目的工具就是Prompt&#xff08;提示&#xff09;。它就像是一种魔法&#xff0c;可以让我们与AI助手进行更加互动和有针对性的对话。那么&#xff0c;让我们一起来了解一下Prompt&#xf…

广东灯具3D扫描抄数建模服务3D测绘出图纸三维逆向设计-CASAIM

灯具三维逆向建模是一种将实际物体转换为数字模型的过程。通过逆向工程技术&#xff0c;可以将现有的灯具进行3D扫描&#xff0c;然后利用专业的逆向设计软件将其转换为准确的三维模型。 以下是CASAIM实施灯具三维逆向建模的一般步骤图&#xff1a; 1. 扫描&#xff1a;三维扫…

SSL证书如何使用?SSL保障通信安全

由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中&#xff0c;因此&#xff0c;仅需安装数字证书或服务器证书就可以激活功能了。SSL证书主要是服务于HTTPS&#xff0c;部署证书后&#xff0c;网站链接就由HTTP开头变为HTTPS。 SSL安全证书主要用于发送安全电子邮件、访…

社交工程和钓鱼攻击防范: 分析针对人类心理和社交工程的攻击技术,并介绍预防这些攻击的方法

第一章&#xff1a;引言 随着科技的不断进步&#xff0c;网络安全问题愈发凸显。在这个数字化时代&#xff0c;社交工程和钓鱼攻击成为黑客们获取敏感信息的常用手段。这些攻击不是基于技术漏洞&#xff0c;而是利用人类心理弱点来进行。本文将深入探讨社交工程和钓鱼攻击的原…

Flowable学习[一]

一、参考CSDN博主[水中加点糖]的博客[采用springbootflowable快速实现工作流]&#xff0c;文章地址&#xff1a;https://puhaiyang.blog.csdn.net/article/details/79845248&#xff0c;下载其发布在github上的代码 二、本地解压代码&#xff0c;并加载到idea中 三、使用docke…

ubuntu18.04安装远程控制软件ToDest方法,针对官网指令报错情况

有时我们在家办公&#xff0c;需要控制实验室的笔记本&#xff0c;因此好用的远程控制软件会让我们的工作事半功倍&#xff01; 常用的远程控制软件有ToDesk&#xff0c;向日葵&#xff0c;以及TeamViewer&#xff0c;但是为感觉ToDesk更流畅一些&#xff0c;所以这里介绍一下…

深入了解Git:介绍及常用命令指南

当今软件开发领域中&#xff0c;版本控制是一个至关重要的概念&#xff0c;而Git作为最流行的分布式版本控制系统&#xff0c;发挥着不可替代的作用。本文将介绍Git的基本概念以及常用命令&#xff0c;帮助你更好地理解和使用这一强大的工具。 Git简介 Git是一种分布式版本管…

从业务层的代码出发,去排查通用框架代码崩溃的问题

目录 1、问题说明 1.1、Release下崩溃&#xff0c;Debug下很难复现 1.2、用Windbg打开dump文件&#xff0c;发现崩溃在通用的框架代码中 2、进一步分析 2.1、使用IDA查看汇编代码尝试寻找崩溃的线索 2.2、在Windbg中查看相关变量的值 2.3、查看最近代码的修改记录&#…

SAP ABAPG开发屏幕自动生成日期的搜索帮助

代码如下&#xff1a; REPORT z_jason_test_f4 . TABLES: s031. PARAMETER p_spmon TYPE spmon DEFAULT sy-datum0(6) OBLIGATORY. SELECT-OPTIONS s_spmon FOR s031-spmon DEFAULT sy-datum0(6) OBLIGATORY. AT SELECTION-SCREEN ON VALUE-REQUEST…

Python面向对象植物大战僵尸

先来一波效果图 来看看如何设计游戏架构 import sysimport pygameclass BaseSprite(pygame.sprite.Sprite):def __init__(self, name):super().__init__()self.image pygame.image.load(name)self.rect self.image.get_rect()class AnimateSprite(BaseSprite):def __init__(…

C++信息学奥赛1131:基因相关性

这段代码的功能是比较两个字符串的相似度&#xff0c;并根据给定的阈值判断是否相似。 解析注释后的代码如下&#xff1a; #include <iostream> #include <string> using namespace std;int main() {double bf; // 定义双精度浮点数变量bf&#xff0c;用于存储阈…

MAC钓鱼并Root权限上线CS并权限维持,以及所有的坑如何解决

本文转载于&#xff1a;https://www.freebuf.com/articles/web/350592.html 作者&#xff1a;文鸯涂鸦智能安全实验室 制作MAC 一、下载工具 首先从github上下载CrossC2。链接&#xff1a;https://github.com/gloxec/CrossC2/releases/tag/v3.1.0。 根据你CS客户端的操作系统选…

python 打印沁园春 雪 居中对齐 文本对齐

以下是python 中使用 DebugInfo 模块居中对齐打印《沁园春・雪》的效果 引入模块 pip install DebugInfopython代码 # -*- coding:UTF-8 -*-# region 引入必要依赖 from DebugInfo.DebugInfo import * # endregion诗文 沁园春 雪 作者: 毛主席 北国风光&#xff0c;千里冰封…

Swagger2 使用

大家好 , 我是苏麟 , 今天带来Swagger的使用 . 官方文档 : 招摇文档 (swagger.io) 访问地址 : 在路径后加上doc.html 例如: http://localhost:8000/doc.html Swagger 使用 依赖 <!--Swagger依赖 核心--><dependency><groupId>io.springfox</groupId&g…

smartsofthelp 5.0 最专业的数据库优化工具,数据库配置优化,数据库高并发优化,SQL 语句优化...

下载地址:百度网盘 请输入提取码 SQL操作返回历史记录&#xff1a; 2023-08-21 20:42:08:220 输入&#xff1a;select version as 版本号 2023-08-21 20:42:08:223 输出&#xff1a;当前数据库实例版本号&#xff1a;Microsoft SQL Server 2012 - 11.0.2100.60 (X64) …

TheGem主题 - 创意多用途和高性能WooCommerce WordPress主题/网站

TheGem主题概述 – 适合所有人的TheGem 作为设计元素、样式和功能的终极 Web 构建工具箱而设计和开发&#xff0c;TheGem主题将帮助您在几分钟内构建一个令人印象深刻的高性能网站&#xff0c;而无需触及一行代码。不要在编码上浪费时间&#xff0c;探索你的创造力&#xff01…

docker优点简介和yum方式安装

一.docker简介 二.docker的优点 1.交付和部署速度快 2.高效虚拟化 3.迁移性和扩展性强 4.管理简单 三.docker的基本概念 1.镜像 2.容器 3.仓库 四.docker的安装部署 &#xff08;1&#xff09;点击容器 ​&#xff08;2&#xff09;选择docker-ce&#xff0c;根据相…

C# OpenCvSharp DNN 二维码增强 超分辨率

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Dnn; using OpenCvSh…