最近学习post技术,登录没有反爬的网站又没啥难度,所以选这个对于新手比较难的网站,也欢迎各位大佬指点。
言归正传。
登录的URL:http://reg.163.com/open/oauth2/logout.do?client_id=2985644329&redirect_uri=https://www.battlenet.com.cn/login/signin/netease&response_type=code&state=AVSoYZI9gkfE56Z9dOTTg0h0RV5HwS_mLdwIGSf4o9p-KnAUi3LJcjdzZQZf4lPCy7QnEEUTgDR-TefpbdQ43hD1HrYDTA9dxc_oaqscHbtF4hRXo28NMDCqz-agYC8AsQ==
这是一个用谷歌浏览器来进行163邮箱登录战网的接口。登录的时候会有3种结果:
1.邮箱需要验证,还需要提交一下对应验证码;
2.邮箱未注册战网账号,直接跳转战网注册界面;
3.邮箱已注册战网账号,直接跳转战网个人界面;
这3种情况会慢慢分析,这里先测试2和3状况。
首先打开浏览器清除cookies等登录信息,打开F12并输入登录URL回车,得到此界面


随便输入一个账号密码点击登录并筛选XHR,得到此通讯界面
直接找出post的通讯,3个通讯逐一观察,名为 l(应该是login)的访问方式是post,查看其表单信息,参数不少,也不知道有几个是是动态参数,最简单粗暴的方法,再提交一次!于是得到以下两个表单:


对比发现,token是动态的,pwdKeyUp是可选的(好像第一次登录是1),最坑的是,密码是加密过的,而且还是动态加密的!!!功夫不负有心人,调试了几小时的js代码后,找出其加密部分的js(2000多行代码…):
navigator={};var dbits; var canary = 0xdeadbeefcafe; var j_lm = 15715070 == (16777215 & canary); function BigInteger(e, t, i) { if (null != e) if ("number" == typeof e) this.fromNumber(e, t, i); else if (null == t && "string" != typeof e) this.fromString(e, 256); else this.fromString(e, t) } function nbi() { return new BigInteger(null) } function am1(e, t, i, n, s, a) { for (; --a >= 0; ) { var r = t * this[e++] + i[n] + s; s = Math.floor(r / 67108864); i[n++] = 67108863 & r } return s } function am2(e, t, i, n, s, a) { var r = 32767 & t , o = t >> 15; for (; --a >= 0; ) { var c = 32767 & this[e]; var _ = this[e++] >> 15; var d = o * c + _ * r; c = r * c + ((32767 & d) << 15) + i[n] + (1073741823 & s); s = (c >>> 30) + (d >>> 15) + o * _ + (s >>> 30); i[n++] = 1073741823 & c } return s } function am3(e, t, i, n, s, a) { var r = 16383 & t , o = t >> 14; for (; --a >= 0; ) { var c = 16383 & this[e]; var _ = this[e++] >> 14; var d = o * c + _ * r; c = r * c + ((16383 & d) << 14) + i[n] + s; s = (c >> 28) + (d >> 14) + o * _; i[n++] = 268435455 & c } return s } if (j_lm && "Microsoft Internet Explorer" == navigator.appName) { BigInteger.prototype.am = am2; dbits = 30 } else if (j_lm && "Netscape" != navigator.appName) { BigInteger.prototype.am = am1; dbits = 26 } else { BigInteger.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; 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(e) { return BI_RM.charAt(e) } function intAt(e, t) { var i = BI_RC[e.charCodeAt(t)]; return null == i ? -1 : i } function bnpCopyTo(e) { for (var t = this.t - 1; t >= 0; --t) e[t] = this[t]; e.t = this.t; e.s = this.s } function bnpFromInt(e) { this.t = 1; this.s = e < 0 ? -1 : 0; if (e > 0) this[0] = e; else if (e < -1) this[0] = e + DV; else this.t = 0 } function nbv(e) { var t = nbi(); t.fromInt(e); return t } function bnpFromString(e, t) { var i; if (16 == t) i = 4; else if (8 == t) i = 3; else if (256 == t) i = 8; else if (2 == t) i = 1; else if (32 == t) i = 5; else if (4 == t) i = 2; else { this.fromRadix(e, t); return } this.t = 0; this.s = 0; var n = e.length , s = !1 , a = 0; for (; --n >= 0; ) { var r = 8 == i ? 255 & e[n] : intAt(e, n); if (!(r < 0)) { s = !1; if (0 == a) this[this.t++] = r; else if (a + i > this.DB) { this[this.t - 1] |= (r & (1 << this.DB - a) - 1) << a; this[this.t++] = r >> this.DB - a } else this[this.t - 1] |= r << a; a += i; if (a >= this.DB) a -= this.DB } else if ("-" == e.charAt(n)) s = !0 } if (8 == i && 0 != (128 & e[0])) { this.s = -1; if (a > 0) this[this.t - 1] |= (1 << this.DB - a) - 1 << a } this.clamp(); if (s) BigInteger.ZERO.subTo(this, this) } function bnpClamp() { var e = this.s & this.DM; for (; this.t > 0 && this[this.t - 1] == e; ) --this.t } function bnToString(e) { if (this.s < 0) return "-" + this.negate().toString(e); var t; if (16 == e) t = 4; else if (8 == e) t = 3; else if (2 == e) t = 1; else if (32 == e) t = 5; else if (4 == e) t = 2; else return this.toRadix(e); var i = (1 << t) - 1, n, s = !1, a = "", r = this.t; var o = this.DB - r * this.DB % t; if (r-- > 0) { if (o < this.DB && (n = this[r] >> o) > 0) { s = !0; a = int2char(n) } for (; r >= 0; ) { if (o < t) { n = (this[r] & (1 << o) - 1) << t - o; n |= this[--r] >> (o += this.DB - t) } else { n = this[r] >> (o -= t) & i; if (o <= 0) { o += this.DB; --r } } if (n > 0) s = !0; if (s) a += int2char(n) } } return s ? a : "0" } function bnNegate() { var e = nbi(); BigInteger.ZERO.subTo(this, e); return e } function bnAbs() { return this.s < 0 ? this.negate() : this } function bnCompareTo(e) { var t = this.s - e.s; if (0 != t) return t; var i = this.t; t = i - e.t; if (0 != t) return this.s < 0 ? -t : t; for (; --i >= 0; ) if (0 != (t = this[i] - e[i])) return t; return 0 } function nbits(e) { var t = 1, i; if (0 != (i = e >>> 16)) { e = i; t += 16 } if (0 != (i = e >> 8)) { e = i; t += 8 } if (0 != (i = e >> 4)) { e = i; t += 4 } if (0 != (i = e >> 2)) { e = i; t += 2 } if (0 != (i = e >> 1)) { e = i; t += 1 } return t } function bnBitLength() { if (this.t <= 0) return 0; else return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM) } function bnpDLShiftTo(e, t) { var i; for (i = this.t - 1; i >= 0; --i) t[i + e] = this[i]; for (i = e - 1; i >= 0; --i) t[i] = 0; t.t = this.t + e; t.s = this.s } function bnpDRShiftTo(e, t) { for (var i = e; i < this.t; ++i) t[i - e] = this[i]; t.t = Math.max(this.t - e, 0); t.s = this.s } function bnpLShiftTo(e, t) { var i = e % this.DB; var n = this.DB - i; var s = (1 << n) - 1; var a = Math.floor(e / this.DB), r = this.s << i & this.DM, o; for (o = this.t - 1; o >= 0; --o) { t[o + a + 1] = this[o] >> n | r; r = (this[o] & s) << i } for (o = a - 1; o >= 0; --o) t[o] = 0; t[a] = r; t.t = this.t + a + 1; t.s = this.s; t.clamp() } function bnpRShiftTo(e, t) { t.s = this.s; var i = Math.floor(e / this.DB); if (!(i >= this.t)) { var n = e % this.DB; var s = this.DB - n; var a = (1 << n) - 1; t[0] = this[i] >> n; for (var r = i + 1; r < this.t; ++r) { t[r - i - 1] |= (this[r] & a) << s; t[r - i] = this[r] >> n } if (n > 0) t[this.t - i - 1] |= (this.s & a) << s; t.t = this.t - i; t.clamp() } else t.t = 0 } function bnpSubTo(e, t) { var i = 0 , n = 0 , s = Math.min(e.t, this.t); for (; i < s; ) { n += this[i] - e[i]; t[i++] = n & this.DM; n >>= this.DB } if (e.t < this.t) { n -= e.s; for (; i < this.t; ) { n += this[i]; t[i++] = n & this.DM; n >>= this.DB } n += this.s } else { n += this.s; for (; i < e.t; ) { n -= e[i]; t[i++] = n & this.DM; n >>= this.DB } n -= e.s } t.s = n < 0 ? -1 : 0; if (n < -1) t[i++] = this.DV + n; else if (n > 0) t[i++] = n; t.t = i; t.clamp() } function bnpMultiplyTo(e, t) { var i = this.abs() , n = e.abs(); var s = i.t; t.t = s + n.t; for (; --s >= 0; ) t[s] = 0; for (s = 0; s < n.t; ++s) t[s + i.t] = i.am(0, n[s], t, s, 0, i.t); t.s = 0; t.clamp(); if (this.s != e.s) BigInteger.ZERO.subTo(t, t) } function bnpSquareTo(e) { var t = this.abs(); var i = e.t = 2 * t.t; for (; --i >= 0; ) e[i] = 0; for (i = 0; i < t.t - 1; ++i) { var n = t.am(i, t[i], e, 2 * i, 0, 1); if ((e[i + t.t] += t.am(i + 1, 2 * t[i], e, 2 * i + 1, n, t.t - i - 1)) >= t.DV) { e[i + t.t] -= t.DV; e[i + t.t + 1] = 1 } } if (e.t > 0) e[e.t - 1] += t.am(i, t[i], e, 2 * i, 0, 1); e.s = 0; e.clamp() } function bnpDivRemTo(e, t, i) { var n = e.abs(); if (!(n.t <= 0)) { var s = this.abs(); if (!(s.t < n.t)) { if (null == i) i = nbi(); var a = nbi() , r = this.s , o = e.s; var c = this.DB - nbits(n[n.t - 1]); if (c > 0) { n.lShiftTo(c, a); s.lShiftTo(c, i) } else { n.copyTo(a); s.copyTo(i) } var _ = a.t; var d = a[_ - 1]; if (0 != d) { var h = d * (1 << this.F1) + (_ > 1 ? a[_ - 2] >> this.F2 : 0); var f = this.FV / h , l = (1 << this.F1) / h , u = 1 << this.F2; var p = i.t , m = p - _ , g = null == t ? nbi() : t; a.dlShiftTo(m, g); if (i.compareTo(g) >= 0) { i[i.t++] = 1; i.subTo(g, i) } BigInteger.ONE.dlShiftTo(_, g); g.subTo(a, a); for (; a.t < _; ) a[a.t++] = 0; for (; --m >= 0; ) { var b = i[--p] == d ? this.DM : Math.floor(i[p] * f + (i[p - 1] + u) * l); if ((i[p] += a.am(0, b, i, m, 0, _)) < b) { a.dlShiftTo(m, g); i.subTo(g, i); for (; i[p] < --b; ) i.subTo(g, i) } } if (null != t) { i.drShiftTo(_, t); if (r != o) BigInteger.ZERO.subTo(t, t) } i.t = _; i.clamp(); if (c > 0) i.rShiftTo(c, i); if (r < 0) BigInteger.ZERO.subTo(i, i) } } else { if (null != t) t.fromInt(0); if (null != i) this.copyTo(i) } } } function bnMod(e) { var t = nbi(); this.abs().divRemTo(e, null, t); if (this.s < 0 && t.compareTo(BigInteger.ZERO) > 0) e.subTo(t, t); return t } function Classic(e) { this.m = e } function cConvert(e) { if (e.s < 0 || e.compareTo(this.m) >= 0) return e.mod(this.m); else return e } function cRevert(e) { return e } function cReduce(e) { e.divRemTo(this.m, null, e) } function cMulTo(e, t, i) { e.multiplyTo(t, i); this.reduce(i) } function cSqrTo(e, t) { e.squareTo(t); this.reduce(t) } Classic.prototype.convert = cConvert; Classic.prototype.revert = cRevert; Classic.prototype.reduce = cReduce; Classic.prototype.mulTo = cMulTo; Classic.prototype.sqrTo = cSqrTo; function bnpInvDigit() { if (this.t < 1) return 0; var e = this[0]; if (0 == (1 & e)) return 0; var t = 3 & e; t = t * (2 - (15 & e) * t) & 15; t = t * (2 - (255 & e) * t) & 255; t = t * (2 - ((65535 & e) * t & 65535)) & 65535; t = t * (2 - e * t % this.DV) % this.DV; return t > 0 ? this.DV - t : -t } function Montgomery(e) { this.m = e; this.mp = e.invDigit(); this.mpl = 32767 & this.mp; this.mph = this.mp >> 15; this.um = (1 << e.DB - 15) - 1; this.mt2 = 2 * e.t } function montConvert(e) { var t = nbi(); e.abs().dlShiftTo(this.m.t, t); t.divRemTo(this.m, null, t); if (e.s < 0 && t.compareTo(BigInteger.ZERO) > 0) this.m.subTo(t, t); return t } function montRevert(e) { var t = nbi(); e.copyTo(t); this.reduce(t); return t } function montReduce(e) { for (; e.t <= this.mt2; ) e[e.t++] = 0; for (var t = 0; t < this.m.t; ++t) { var i = 32767 & e[t]; var n = i * this.mpl + ((i * this.mph + (e[t] >> 15) * this.mpl & this.um) << 15) & e.DM; i = t + this.m.t; e[i] += this.m.am(0, n, e, t, 0, this.m.t); for (; e[i] >= e.DV; ) { e[i] -= e.DV; e[++i]++ } } e.clamp(); e.drShiftTo(this.m.t, e); if (e.compareTo(this.m) >= 0) e.subTo(this.m, e) } function montSqrTo(e, t) { e.squareTo(t); this.reduce(t) } function montMulTo(e, t, i) { e.multiplyTo(t, i); this.reduce(i) } Montgomery.prototype.convert = montConvert; Montgomery.prototype.revert = montRevert; Montgomery.prototype.reduce = montReduce; Montgomery.prototype.mulTo = montMulTo; Montgomery.prototype.sqrTo = montSqrTo; function bnpIsEven() { return 0 == (this.t > 0 ? 1 & this[0] : this.s) } function bnpExp(e, t) { if (e > 4294967295 || e < 1) return BigInteger.ONE; var i = nbi() , n = nbi() , s = t.convert(this) , a = nbits(e) - 1; s.copyTo(i); for (; --a >= 0; ) { t.sqrTo(i, n); if ((e & 1 << a) > 0) t.mulTo(n, s, i); else { var r = i; i = n; n = r } } return t.revert(i) } function bnModPowInt(e, t) { var i; if (e < 256 || t.isEven()) i = new Classic(t); else i = new Montgomery(t); return this.exp(e, i) } 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; 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; BigInteger.ZERO = nbv(0); BigInteger.ONE = nbv(1); function bnClone() { var e = nbi(); this.copyTo(e); return e } function bnIntValue() { if (this.s < 0) { if (1 == this.t) return this[0] - this.DV; else if (0 == this.t) return -1 } else if (1 == this.t) return this[0]; else if (0 == this.t) return 0; return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0] } function bnByteValue() { return 0 == this.t ? this.s : this[0] << 24 >> 24 } function bnShortValue() { return 0 == this.t ? this.s : this[0] << 16 >> 16 } function bnpChunkSize(e) { return Math.floor(Math.LN2 * this.DB / Math.log(e)) } function bnSigNum() { if (this.s < 0) return -1; else if (this.t <= 0 || 1 == this.t && this[0] <= 0) return 0; else return 1 } function bnpToRadix(e) { if (null == e) e = 10; if (0 == this.signum() || e < 2 || e > 36) return "0"; var t = this.chunkSize(e); var i = Math.pow(e, t); var n = nbv(i) , s = nbi() , a = nbi() , r = ""; this.divRemTo(n, s, a); for (; s.signum() > 0; ) { r = (i + a.intValue()).toString(e).substr(1) + r; s.divRemTo(n, s, a) } return a.intValue().toString(e) + r } function bnpFromRadix(e, t) { this.fromInt(0); if (null == t) t = 10; var i = this.chunkSize(t); var n = Math.pow(t, i) , s = !1 , a = 0 , r = 0; for (var o = 0; o < e.length; ++o) { var c = intAt(e, o); if (!(c < 0)) { r = t * r + c; if (++a >= i) { this.dMultiply(n); this.dAddOffset(r, 0); a = 0; r = 0 } } else if ("-" == e.charAt(o) && 0 == this.signum()) s = !0 } if (a > 0) { this.dMultiply(Math.pow(t, a)); this.dAddOffset(r, 0) } if (s) BigInteger.ZERO.subTo(this, this) } function bnpFromNumber(e, t, i) { if ("number" == typeof t) if (e < 2) this.fromInt(1); else { this.fromNumber(e, i); if (!this.testBit(e - 1)) this.bitwiseTo(BigInteger.ONE.shiftLeft(e - 1), op_or, this); if (this.isEven()) this.dAddOffset(1, 0); for (; !this.isProbablePrime(t); ) { this.dAddOffset(2, 0); if (this.bitLength() > e) this.subTo(BigInteger.ONE.shiftLeft(e - 1), this) } } else { var n = new Array , s = 7 & e; n.length = (e >> 3) + 1; t.nextBytes(n); if (s > 0) n[0] &= (1 << s) - 1; else n[0] = 0; this.fromString(n, 256) } } function bnToByteArray() { var e = this.t , t = new Array; t[0] = this.s; var i = this.DB - e * this.DB % 8, n, s = 0; if (e-- > 0) { if (i < this.DB && (n = this[e] >> i) != (this.s & this.DM) >> i) t[s++] = n | this.s << this.DB - i; for (; e >= 0; ) { if (i < 8) { n = (this[e] & (1 << i) - 1) << 8 - i; n |= this[--e] >> (i += this.DB - 8) } else { n = this[e] >> (i -= 8) & 255; if (i <= 0) { i += this.DB; --e } } if (0 != (128 & n)) n |= -256; if (0 == s && (128 & this.s) != (128 & n)) ++s; if (s > 0 || n != this.s) t[s++] = n } } return t } function bnEquals(e) { return 0 == this.compareTo(e) } function bnMin(e) { return this.compareTo(e) < 0 ? this : e } function bnMax(e) { return this.compareTo(e) > 0 ? this : e } function bnpBitwiseTo(e, t, i) { var n, s, a = Math.min(e.t, this.t); for (n = 0; n < a; ++n) i[n] = t(this[n], e[n]); if (e.t < this.t) { s = e.s & this.DM; for (n = a; n < this.t; ++n) i[n] = t(this[n], s); i.t = this.t } else { s = this.s & this.DM; for (n = a; n < e.t; ++n) i[n] = t(s, e[n]); i.t = e.t } i.s = t(this.s, e.s); i.clamp() } function op_and(e, t) { return e & t } function bnAnd(e) { var t = nbi(); this.bitwiseTo(e, op_and, t); return t } function op_or(e, t) { return e | t } function bnOr(e) { var t = nbi(); this.bitwiseTo(e, op_or, t); return t } function op_xor(e, t) { return e ^ t } function bnXor(e) { var t = nbi(); this.bitwiseTo(e, op_xor, t); return t } function op_andnot(e, t) { return e & ~t } function bnAndNot(e) { var t = nbi(); this.bitwiseTo(e, op_andnot, t); return t } function bnNot() { var e = nbi(); for (var t = 0; t < this.t; ++t) e[t] = this.DM & ~this[t]; e.t = this.t; e.s = ~this.s; return e } function bnShiftLeft(e) { var t = nbi(); if (e < 0) this.rShiftTo(-e, t); else this.lShiftTo(e, t); return t } function bnShiftRight(e) { var t = nbi(); if (e < 0) this.lShiftTo(-e, t); else this.rShiftTo(e, t); return t } function lbit(e) { if (0 == e) return -1; var t = 0; if (0 == (65535 & e)) { e >>= 16; t += 16 } if (0 == (255 & e)) { e >>= 8; t += 8 } if (0 == (15 & e)) { e >>= 4; t += 4 } if (0 == (3 & e)) { e >>= 2; t += 2 } if (0 == (1 & e)) ++t; return t } function bnGetLowestSetBit() { for (var e = 0; e < this.t; ++e) if (0 != this[e]) return e * this.DB + lbit(this[e]); if (this.s < 0) return this.t * this.DB; else return -1 } function cbit(e) { var t = 0; for (; 0 != e; ) { e &= e - 1; ++t } return t } function bnBitCount() { var e = 0 , t = this.s & this.DM; for (var i = 0; i < this.t; ++i) e += cbit(this[i] ^ t); return e } function bnTestBit(e) { var t = Math.floor(e / this.DB); if (t >= this.t) return 0 != this.s; else return 0 != (this[t] & 1 << e % this.DB) } function bnpChangeBit(e, t) { var i = BigInteger.ONE.shiftLeft(e); this.bitwiseTo(i, t, i); return i } function bnSetBit(e) { return this.changeBit(e, op_or) } function bnClearBit(e) { return this.changeBit(e, op_andnot) } function bnFlipBit(e) { return this.changeBit(e, op_xor) } function bnpAddTo(e, t) { var i = 0 , n = 0 , s = Math.min(e.t, this.t); for (; i < s; ) { n += this[i] + e[i]; t[i++] = n & this.DM; n >>= this.DB } if (e.t < this.t) { n += e.s; for (; i < this.t; ) { n += this[i]; t[i++] = n & this.DM; n >>= this.DB } n += this.s } else { n += this.s; for (; i < e.t; ) { n += e[i]; t[i++] = n & this.DM; n >>= this.DB } n += e.s } t.s = n < 0 ? -1 : 0; if (n > 0) t[i++] = n; else if (n < -1) t[i++] = this.DV + n; t.t = i; t.clamp() } function bnAdd(e) { var t = nbi(); this.addTo(e, t); return t } function bnSubtract(e) { var t = nbi(); this.subTo(e, t); return t } function bnMultiply(e) { var t = nbi(); this.multiplyTo(e, t); return t } function bnSquare() { var e = nbi(); this.squareTo(e); return e } function bnDivide(e) { var t = nbi(); this.divRemTo(e, t, null); return t } function bnRemainder(e) { var t = nbi(); this.divRemTo(e, null, t); return t } function bnDivideAndRemainder(e) { var t = nbi() , i = nbi(); this.divRemTo(e, t, i); return new Array(t,i) } function bnpDMultiply(e) { this[this.t] = this.am(0, e - 1, this, 0, 0, this.t); ++this.t; this.clamp() } function bnpDAddOffset(e, t) { if (0 != e) { for (; this.t <= t; ) this[this.t++] = 0; this[t] += e; for (; this[t] >= this.DV; ) { this[t] -= this.DV; if (++t >= this.t) this[this.t++] = 0; ++this[t] } } } function NullExp() {} function nNop(e) { return e } function nMulTo(e, t, i) { e.multiplyTo(t, i) } function nSqrTo(e, t) { e.squareTo(t) } NullExp.prototype.convert = nNop; NullExp.prototype.revert = nNop; NullExp.prototype.mulTo = nMulTo; NullExp.prototype.sqrTo = nSqrTo; function bnPow(e) { return this.exp(e, new NullExp) } function bnpMultiplyLowerTo(e, t, i) { var n = Math.min(this.t + e.t, t); i.s = 0; i.t = n; for (; n > 0; ) i[--n] = 0; var s; for (s = i.t - this.t; n < s; ++n) i[n + this.t] = this.am(0, e[n], i, n, 0, this.t); for (s = Math.min(e.t, t); n < s; ++n) this.am(0, e[n], i, n, 0, t - n); i.clamp() } function bnpMultiplyUpperTo(e, t, i) { --t; var n = i.t = this.t + e.t - t; i.s = 0; for (; --n >= 0; ) i[n] = 0; for (n = Math.max(t - this.t, 0); n < e.t; ++n) i[this.t + n - t] = this.am(t - n, e[n], i, 0, 0, this.t + n - t); i.clamp(); i.drShiftTo(1, i) } function Barrett(e) { this.r2 = nbi(); this.q3 = nbi(); BigInteger.ONE.dlShiftTo(2 * e.t, this.r2); this.mu = this.r2.divide(e); this.m = e } function barrettConvert(e) { if (e.s < 0 || e.t > 2 * this.m.t) return e.mod(this.m); else if (e.compareTo(this.m) < 0) return e; else { var t = nbi(); e.copyTo(t); this.reduce(t); return t } } function barrettRevert(e) { return e } function barrettReduce(e) { e.drShiftTo(this.m.t - 1, this.r2); if (e.t > this.m.t + 1) { e.t = this.m.t + 1; e.clamp() } this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); for (; e.compareTo(this.r2) < 0; ) e.dAddOffset(1, this.m.t + 1); e.subTo(this.r2, e); for (; e.compareTo(this.m) >= 0; ) e.subTo(this.m, e) } function barrettSqrTo(e, t) { e.squareTo(t); this.reduce(t) } function barrettMulTo(e, t, i) { e.multiplyTo(t, i); this.reduce(i) } Barrett.prototype.convert = barrettConvert; Barrett.prototype.revert = barrettRevert; Barrett.prototype.reduce = barrettReduce; Barrett.prototype.mulTo = barrettMulTo; Barrett.prototype.sqrTo = barrettSqrTo; function bnModPow(e, t) { var i = e.bitLength(), n, s = nbv(1), a; if (i <= 0) return s; else if (i < 18) n = 1; else if (i < 48) n = 3; else if (i < 144) n = 4; else if (i < 768) n = 5; else n = 6; if (i < 8) a = new Classic(t); else if (t.isEven()) a = new Barrett(t); else a = new Montgomery(t); var r = new Array , o = 3 , c = n - 1 , _ = (1 << n) - 1; r[1] = a.convert(this); if (n > 1) { var d = nbi(); a.sqrTo(r[1], d); for (; o <= _; ) { r[o] = nbi(); a.mulTo(d, r[o - 2], r[o]); o += 2 } } var h = e.t - 1, f, l = !0, u = nbi(), p; i = nbits(e[h]) - 1; for (; h >= 0; ) { if (i >= c) f = e[h] >> i - c & _; else { f = (e[h] & (1 << i + 1) - 1) << c - i; if (h > 0) f |= e[h - 1] >> this.DB + i - c } o = n; for (; 0 == (1 & f); ) { f >>= 1; --o } if ((i -= o) < 0) { i += this.DB; --h } if (l) { r[f].copyTo(s); l = !1 } else { for (; o > 1; ) { a.sqrTo(s, u); a.sqrTo(u, s); o -= 2 } if (o > 0) a.sqrTo(s, u); else { p = s; s = u; u = p } a.mulTo(u, r[f], s) } for (; h >= 0 && 0 == (e[h] & 1 << i); ) { a.sqrTo(s, u); p = s; s = u; u = p; if (--i < 0) { i = this.DB - 1; --h } } } return a.revert(s) } function bnGCD(e) { var t = this.s < 0 ? this.negate() : this.clone(); var i = e.s < 0 ? e.negate() : e.clone(); if (t.compareTo(i) < 0) { var n = t; t = i; i = n } var s = t.getLowestSetBit() , a = i.getLowestSetBit(); if (a < 0) return t; if (s < a) a = s; if (a > 0) { t.rShiftTo(a, t); i.rShiftTo(a, i) } for (; t.signum() > 0; ) { if ((s = t.getLowestSetBit()) > 0) t.rShiftTo(s, t); if ((s = i.getLowestSetBit()) > 0) i.rShiftTo(s, i); if (t.compareTo(i) >= 0) { t.subTo(i, t); t.rShiftTo(1, t) } else { i.subTo(t, i); i.rShiftTo(1, i) } } if (a > 0) i.lShiftTo(a, i); return i } function bnpModInt(e) { if (e <= 0) return 0; var t = this.DV % e , i = this.s < 0 ? e - 1 : 0; if (this.t > 0) if (0 == t) i = this[0] % e; else for (var n = this.t - 1; n >= 0; --n) i = (t * i + this[n]) % e; return i } function bnModInverse(e) { var t = e.isEven(); if (this.isEven() && t || 0 == e.signum()) return BigInteger.ZERO; var i = e.clone() , n = this.clone(); var s = nbv(1) , a = nbv(0) , r = nbv(0) , o = nbv(1); for (; 0 != i.signum(); ) { for (; i.isEven(); ) { i.rShiftTo(1, i); if (t) { if (!s.isEven() || !a.isEven()) { s.addTo(this, s); a.subTo(e, a) } s.rShiftTo(1, s) } else if (!a.isEven()) a.subTo(e, a); a.rShiftTo(1, a) } for (; n.isEven(); ) { n.rShiftTo(1, n); if (t) { if (!r.isEven() || !o.isEven()) { r.addTo(this, r); o.subTo(e, o) } r.rShiftTo(1, r) } else if (!o.isEven()) o.subTo(e, o); o.rShiftTo(1, o) } if (i.compareTo(n) >= 0) { i.subTo(n, i); if (t) s.subTo(r, s); a.subTo(o, a) } else { n.subTo(i, n); if (t) r.subTo(s, r); o.subTo(a, o) } } if (0 != n.compareTo(BigInteger.ONE)) return BigInteger.ZERO; if (o.compareTo(e) >= 0) return o.subtract(e); if (o.signum() < 0) o.addTo(e, o); else return o; if (o.signum() < 0) return o.add(e); else return o } var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; function bnIsProbablePrime(e) { var t, i = this.abs(); if (1 == i.t && i[0] <= lowprimes[lowprimes.length - 1]) { for (t = 0; t < lowprimes.length; ++t) if (i[0] == lowprimes[t]) return !0; return !1 } if (i.isEven()) return !1; t = 1; for (; t < lowprimes.length; ) { var n = lowprimes[t] , s = t + 1; for (; s < lowprimes.length && n < lplim; ) n *= lowprimes[s++]; n = i.modInt(n); for (; t < s; ) if (n % lowprimes[t++] == 0) return !1 } return i.millerRabin(e) } function bnpMillerRabin(e) { var t = this.subtract(BigInteger.ONE); var i = t.getLowestSetBit(); if (i <= 0) return !1; var n = t.shiftRight(i); e = e + 1 >> 1; if (e > lowprimes.length) e = lowprimes.length; var s = nbi(); for (var a = 0; a < e; ++a) { s.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]); var r = s.modPow(n, this); if (0 != r.compareTo(BigInteger.ONE) && 0 != r.compareTo(t)) { var o = 1; for (; o++ < i && 0 != r.compareTo(t); ) { r = r.modPowInt(2, this); if (0 == r.compareTo(BigInteger.ONE)) return !1 } if (0 != r.compareTo(t)) return !1 } } return !0 } BigInteger.prototype.chunkSize = bnpChunkSize; BigInteger.prototype.toRadix = bnpToRadix; BigInteger.prototype.fromRadix = bnpFromRadix; BigInteger.prototype.fromNumber = bnpFromNumber; BigInteger.prototype.bitwiseTo = bnpBitwiseTo; BigInteger.prototype.changeBit = bnpChangeBit; BigInteger.prototype.addTo = bnpAddTo; BigInteger.prototype.dMultiply = bnpDMultiply; BigInteger.prototype.dAddOffset = bnpDAddOffset; BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; BigInteger.prototype.modInt = bnpModInt; BigInteger.prototype.millerRabin = bnpMillerRabin; BigInteger.prototype.clone = bnClone; BigInteger.prototype.intValue = bnIntValue; BigInteger.prototype.byteValue = bnByteValue; BigInteger.prototype.shortValue = bnShortValue; BigInteger.prototype.signum = bnSigNum; BigInteger.prototype.toByteArray = bnToByteArray; BigInteger.prototype.equals = bnEquals; BigInteger.prototype.min = bnMin; BigInteger.prototype.max = bnMax; BigInteger.prototype.and = bnAnd; BigInteger.prototype.or = bnOr; BigInteger.prototype.xor = bnXor; BigInteger.prototype.andNot = bnAndNot; BigInteger.prototype.not = bnNot; BigInteger.prototype.shiftLeft = bnShiftLeft; BigInteger.prototype.shiftRight = bnShiftRight; BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; BigInteger.prototype.bitCount = bnBitCount; BigInteger.prototype.testBit = bnTestBit; BigInteger.prototype.setBit = bnSetBit; BigInteger.prototype.clearBit = bnClearBit; BigInteger.prototype.flipBit = bnFlipBit; BigInteger.prototype.add = bnAdd; BigInteger.prototype.subtract = bnSubtract; BigInteger.prototype.multiply = bnMultiply; BigInteger.prototype.divide = bnDivide; BigInteger.prototype.remainder = bnRemainder; BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; BigInteger.prototype.modPow = bnModPow; BigInteger.prototype.modInverse = bnModInverse; BigInteger.prototype.pow = bnPow; BigInteger.prototype.gcd = bnGCD; BigInteger.prototype.isProbablePrime = bnIsProbablePrime; BigInteger.prototype.square = bnSquare; if ("object" != typeof JSON) JSON = {}; !function() { "use strict"; function f(e) { return e < 10 ? "0" + e : e } function quote(e) { escapable.lastIndex = 0; return escapable.test(e) ? '"' + e.replace(escapable, function(e) { var t = meta[e]; return "string" == typeof t ? t : "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4) }) + '"' : '"' + e + '"' } function str(e, t) { var i, n, s, a, r = gap, o, c = t[e]; if (c && "object" == typeof c && "function" == typeof c.toJSON) c = c.toJSON(e); if ("function" == typeof rep) c = rep.call(t, e, c); switch (typeof c) { case "string": return quote(c); case "number": return isFinite(c) ? String(c) : "null"; case "boolean": case "null": return String(c); case "object": if (!c) return "null"; gap += indent; o = []; if ("[object Array]" === Object.prototype.toString.apply(c)) { a = c.length; for (i = 0; i < a; i += 1) o[i] = str(i, c) || "null"; s = 0 === o.length ? "[]" : gap ? "[\n" + gap + o.join(",\n" + gap) + "\n" + r + "]" : "[" + o.join(",") + "]"; gap = r; return s } if (rep && "object" == typeof rep) { a = rep.length; for (i = 0; i < a; i += 1) if ("string" == typeof rep[i]) { n = rep[i]; s = str(n, c); if (s) o.push(quote(n) + (gap ? ": " : ":") + s) } } else for (n in c) if (Object.prototype.hasOwnProperty.call(c, n)) { s = str(n, c); if (s) o.push(quote(n) + (gap ? ": " : ":") + s) } s = 0 === o.length ? "{}" : gap ? "{\n" + gap + o.join(",\n" + gap) + "\n" + r + "}" : "{" + o.join(",") + "}"; gap = r; return s } } if ("function" != typeof Date.prototype.toJSON) { Date.prototype.toJSON = function() { return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null } ; String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function() { return this.valueOf() } } var cx, escapable, gap, indent, meta, rep; if ("function" != typeof JSON.stringify) { escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; meta = { "\b": "\\b", "\t": "\\t", "\n": "\\n", "\f": "\\f", "\r": "\\r", '"': '\\"', "\\": "\\\\" }; JSON.stringify = function(e, t, i) { var n; gap = ""; indent = ""; if ("number" == typeof i) for (n = 0; n < i; n += 1) indent += " "; else if ("string" == typeof i) indent = i; rep = t; if (t && "function" != typeof t && ("object" != typeof t || "number" != typeof t.length)) throw new Error("JSON.stringify"); return str("", { "": e }) } } if ("function" != typeof JSON.parse) { cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; JSON.parse = function(text, reviver) { function walk(e, t) { var i, n, s = e[t]; if (s && "object" == typeof s) for (i in s) if (Object.prototype.hasOwnProperty.call(s, i)) { n = walk(s, i); if (void 0 !== n) s[i] = n; else delete s[i] } return reviver.call(e, t, s) } var j; text = String(text); cx.lastIndex = 0; if (cx.test(text)) text = text.replace(cx, function(e) { return "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4) }); if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g, ""))) { j = eval("(" + text + ")"); return "function" == typeof reviver ? walk({ "": j }, "") : j } throw new SyntaxError("JSON.parse") } } }(); var RSAPublicKey = function(e, t) { this.modulus = new BigInteger(Hex.encode(e),16); this.encryptionExponent = new BigInteger(Hex.encode(t),16) }; var UTF8 = { encode: function(e) { e = e.replace(/\r\n/g, "\n"); var t = ""; for (var i = 0; i < e.length; i++) { var n = e.charCodeAt(i); if (n < 128) t += String.fromCharCode(n); else if (n > 127 && n < 2048) { t += String.fromCharCode(n >> 6 | 192); t += String.fromCharCode(63 & n | 128) } else { t += String.fromCharCode(n >> 12 | 224); t += String.fromCharCode(n >> 6 & 63 | 128); t += String.fromCharCode(63 & n | 128) } } return t }, decode: function(e) { var t = ""; var i = 0; var n = $c1 = $c2 = 0; for (; i < e.length; ) { n = e.charCodeAt(i); if (n < 128) { t += String.fromCharCode(n); i++ } else if (n > 191 && n < 224) { $c2 = e.charCodeAt(i + 1); t += String.fromCharCode((31 & n) << 6 | 63 & $c2); i += 2 } else { $c2 = e.charCodeAt(i + 1); $c3 = e.charCodeAt(i + 2); t += String.fromCharCode((15 & n) << 12 | (63 & $c2) << 6 | 63 & $c3); i += 3 } } return t } }; var Base64 = { base64: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function(e) { if (!e) return !1; var t = ""; var i, n, s; var a, r, o, c; var _ = 0; do { i = e.charCodeAt(_++); n = e.charCodeAt(_++); s = e.charCodeAt(_++); a = i >> 2; r = (3 & i) << 4 | n >> 4; o = (15 & n) << 2 | s >> 6; c = 63 & s; if (isNaN(n)) o = c = 64; else if (isNaN(s)) c = 64; t += this.base64.charAt(a) + this.base64.charAt(r) + this.base64.charAt(o) + this.base64.charAt(c) } while (_ < e.length);return t }, decode: function(e) { if (!e) return !1; e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); var t = ""; var i, n, s, a; var r = 0; do { i = this.base64.indexOf(e.charAt(r++)); n = this.base64.indexOf(e.charAt(r++)); s = this.base64.indexOf(e.charAt(r++)); a = this.base64.indexOf(e.charAt(r++)); t += String.fromCharCode(i << 2 | n >> 4); if (64 != s) t += String.fromCharCode((15 & n) << 4 | s >> 2); if (64 != a) t += String.fromCharCode((3 & s) << 6 | a) } while (r < e.length);return t } }; var Hex = { hex: "0123456789abcdef", encode: function(e) { if (!e) return !1; var t = ""; var i; var n = 0; do { i = e.charCodeAt(n++); t += this.hex.charAt(i >> 4 & 15) + this.hex.charAt(15 & i) } while (n < e.length);return t }, decode: function(e) { if (!e) return !1; e = e.replace(/[^0-9abcdef]/g, ""); var t = ""; var i = 0; do t += String.fromCharCode(this.hex.indexOf(e.charAt(i++)) << 4 & 240 | 15 & this.hex.indexOf(e.charAt(i++))); while (i < e.length);return t } }; var ASN1Data = function(e) { this.error = !1; this.parse = function(e) { if (!e) { this.error = !0; return null } var t = []; for (; e.length > 0; ) { var i = e.charCodeAt(0); e = e.substr(1); var n = 0; if (5 == (31 & i)) e = e.substr(1); else if (128 & e.charCodeAt(0)) { var s = 127 & e.charCodeAt(0); e = e.substr(1); if (s > 0) n = e.charCodeAt(0); if (s > 1) n = n << 8 | e.charCodeAt(1); if (s > 2) { this.error = !0; return null } e = e.substr(s) } else { n = e.charCodeAt(0); e = e.substr(1) } var a = ""; if (n) { if (n > e.length) { this.error = !0; return null } a = e.substr(0, n); e = e.substr(n) } if (32 & i) t.push(this.parse(a)); else t.push(this.value(128 & i ? 4 : 31 & i, a)) } return t } ; this.value = function(e, t) { if (1 == e) return t ? !0 : !1; else if (2 == e) return t; else if (3 == e) return this.parse(t.substr(1)); else if (5 == e) return null; else if (6 == e) { var i = []; var n = t.charCodeAt(0); i.push(Math.floor(n / 40)); i.push(n - 40 * i[0]); var s = []; var a = 0; var r; for (r = 1; r < t.length; r++) { var o = t.charCodeAt(r); s.push(127 & o); if (128 & o) a++; else { var c; var _ = 0; for (c = 0; c < s.length; c++) _ += s[c] * Math.pow(128, a--); i.push(_); a = 0; s = [] } } return i.join(".") } return null } ; this.data = this.parse(e) }; var RSA = { getPublicKey: function(e) { if (e.length < 50) return !1; if ("-----BEGIN PUBLIC KEY-----" != e.substr(0, 26)) return !1; e = e.substr(26); if ("-----END PUBLIC KEY-----" != e.substr(e.length - 24)) return !1; e = e.substr(0, e.length - 24); e = new ASN1Data(Base64.decode(e)); if (e.error) return !1; e = e.data; if ("1.2.840.113549.1.1.1" == e[0][0][0]) return new RSAPublicKey(e[0][1][0][0], e[0][1][0][1]); else return !1 }, encrypt: function(e, t) { if (!t) return !1; var i = t.modulus.bitLength() + 7 >> 3; e = this.pkcs1pad2(e, i); if (!e) return !1; e = e.modPowInt(t.encryptionExponent, t.modulus); if (!e) return !1; e = e.toString(16); for (; e.length < 2 * i;) e = "0" + e; return Base64.encode(Hex.decode(e)) }, decrypt: function(e) { var t = new BigInteger(e, 16) }, pkcs1pad2: function(e, t) { if (t < e.length + 11) return null; var i = []; var n = e.length - 1; for (; n >= 0 && t > 0;) i[--t] = e.charCodeAt(n--); i[--t] = 0; for (; t > 2;) i[--t] = Math.floor(254 * Math.random()) + 1; i[--t] = 2; i[--t] = 0; return new BigInteger(i) } }; var ASN1Data = function(e) { this.error = !1; this.parse = function(e) { if (!e) { this.error = !0; return null } var t = []; for (; e.length > 0; ) { var i = e.charCodeAt(0); e = e.substr(1); var n = 0; if (5 == (31 & i)) e = e.substr(1); else if (128 & e.charCodeAt(0)) { var s = 127 & e.charCodeAt(0); e = e.substr(1); if (s > 0) n = e.charCodeAt(0); if (s > 1) n = n << 8 | e.charCodeAt(1); if (s > 2) { this.error = !0; return null } e = e.substr(s) } else { n = e.charCodeAt(0); e = e.substr(1) } var a = ""; if (n) { if (n > e.length) { this.error = !0; return null } a = e.substr(0, n); e = e.substr(n) } if (32 & i) t.push(this.parse(a)); else t.push(this.value(128 & i ? 4 : 31 & i, a)) } return t } ; this.value = function(e, t) { if (1 == e) return t ? !0 : !1; else if (2 == e) return t; else if (3 == e) return this.parse(t.substr(1)); else if (5 == e) return null; else if (6 == e) { var i = []; var n = t.charCodeAt(0); i.push(Math.floor(n / 40)); i.push(n - 40 * i[0]); var s = []; var a = 0; var r; for (r = 1; r < t.length; r++) { var o = t.charCodeAt(r); s.push(127 & o); if (128 & o) a++; else { var c; var _ = 0; for (c = 0; c < s.length; c++) _ += s[c] * Math.pow(128, a--); i.push(_); a = 0; s = [] } } return i.join(".") } return null } ; this.data = this.parse(e) }; var Base64 = { base64: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function(e) { if (!e) return !1; var t = ""; var i, n, s; var a, r, o, c; var _ = 0; do { i = e.charCodeAt(_++); n = e.charCodeAt(_++); s = e.charCodeAt(_++); a = i >> 2; r = (3 & i) << 4 | n >> 4; o = (15 & n) << 2 | s >> 6; c = 63 & s; if (isNaN(n)) o = c = 64; else if (isNaN(s)) c = 64; t += this.base64.charAt(a) + this.base64.charAt(r) + this.base64.charAt(o) + this.base64.charAt(c) } while (_ < e.length);return t }, decode: function(e) { if (!e) return !1; e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); var t = ""; var i, n, s, a; var r = 0; do { i = this.base64.indexOf(e.charAt(r++)); n = this.base64.indexOf(e.charAt(r++)); s = this.base64.indexOf(e.charAt(r++)); a = this.base64.indexOf(e.charAt(r++)); t += String.fromCharCode(i << 2 | n >> 4); if (64 != s) t += String.fromCharCode((15 & n) << 4 | s >> 2); if (64 != a) t += String.fromCharCode((3 & s) << 6 | a) } while (r < e.length);return t } }; var Hex = { hex: "0123456789abcdef", encode: function(e) { if (!e) return !1; var t = ""; var i; var n = 0; do { i = e.charCodeAt(n++); t += this.hex.charAt(i >> 4 & 15) + this.hex.charAt(15 & i) } while (n < e.length);return t }, decode: function(e) { if (!e) return !1; e = e.replace(/[^0-9abcdef]/g, ""); var t = ""; var i = 0; do t += String.fromCharCode(this.hex.indexOf(e.charAt(i++)) << 4 & 240 | 15 & this.hex.indexOf(e.charAt(i++))); while (i < e.length);return t } }; function encrypt2(e) { var p = "-----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5gsH+AA4XWONB5TDcUd+xCz7ejOFHZKlcZDx+pF1i7Gsvi1vjyJoQhRtRSn950x498VUkx7rUxg1/ScBVfrRxQOZ8xFBye3pjAzfb22+RCuYApSVpJ3OO3KsEuKExftz9oFBv3ejxPlYc5yq7YiBO8XlTnQN0Sa4R4qhPO3I2MQIDAQAB-----END PUBLIC KEY-----" var t = RSA.getPublicKey(p); return RSA.encrypt(e, t) };

提交表单,返回<html><head><title>Apache Tomcat/7.0.52 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 400 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The request sent by the client was syntactically incorrect.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.52</h3></body></html>
HTTP Status 400???复查了一遍,怀疑是cookies没处理好,下次研究cookies。

163邮箱接口post登录战网(一)相关推荐

  1. Python + Selenium实现163邮箱的自动登录和发送邮件

    运用Python和Selenium实现163邮箱的自动登录和发送邮件 初接触selenium,最近研究了一下用python和Selenium实现163邮箱的自动登录和发送邮件的实现过程,中间出现了各种 ...

  2. python模拟登录163邮箱_python模拟登录网易邮箱-阿里云开发者社区

    python模拟登录网易邮箱 #coding:utf-8 import urllib2,urllib import cookielib from bs4 import BeautifulSoup #设 ...

  3. selenium基于python定位163邮箱实现自动登录

    1.采用邮箱账号登录: 获取此元素的id,定位元素deiver.find_element_by_id('lbNormal').click() 2.获取账号输入框的元素属性定位元素: 由于登录框在内嵌i ...

  4. Python+Selenium实现自动登录163邮箱导出邮件可按时间和内容进行筛选

    文章目录 描述 一.打码平台 二.实现方法 1. 过点选验证 2. 全部代码 总结 备注 描述 此脚本可以实现网易163邮箱的自动登录,自动过点选验证,按时间和关键字筛选内容,最后导出邮件 一.打码平 ...

  5. 163邮箱登录报错xm001 NO LOGIN Login error user suspended

    出现这个原因是因为没有打开163邮箱的第三方登录权限,只需要设置后就可以进行登录了. 设置步骤 1.进入设置页面 2.启用IMAP/SMTP服务 和 POP3/SMTP服务 开启后既可正常登录,如果出 ...

  6. Outlook2019关联163邮箱

    这里写目录标题 1.配置163邮箱 2.配置Outlook2019 接收邮件 发送邮件 如果已经启动想要更换 ,我直接上图 有人会问上面的地址哪里来 1.配置163邮箱 首先 打开163邮箱 输入账号 ...

  7. python-使用django发送163邮箱

    使用django发送163邮箱 第一步登录163 打开设置 打开IMAP/SMTP服务 保存163给的一个授权码 第二步:找到settings.py文件,配置以下内容 EMAIL_BACKEND = ...

  8. selenium2与python自动化5-iframe和163邮箱登录

    Frame和iframe两者可以实现的功能基本类似,不过iframe比Frame使用起来更加灵活,Frame不能脱离frameset单独使用,而iframe可以,frame不能放在body中,否则不能 ...

  9. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...

最新文章

  1. Trie树详解及其应用
  2. python的工作方向-Python的就业的方向和前景
  3. linux内核态串口读写程序,linux 0.11 内核学习 -- rs_io.s,串口汇编代码
  4. Spring - Java/J2EE Application Framework 应用框架 第 15 章 EJB的存取和实现
  5. 【SpringBoot实战】员工部门管理页面,增删改查,含源码
  6. SAP CRM的订单模型移植到S4HANA后,在订单保存功能上作出的改进
  7. java三板斧_Java 枚举使用三板斧
  8. Python 获取当前时间或当前时间戳,通过时间戳获取hash
  9. 激光slam_激光SLAM与视觉SLAM,移动机器人核心技术不断升级
  10. 有关python_30个有关Python的小技巧
  11. JavaScript 学习计划
  12. python--时间日期
  13. 你见过最垃圾的代码长什么样?19 种垃圾代码片段!
  14. FairScheduler源码计算fair share
  15. 电脑桌面两个计算机图标怎么删除,电脑桌面上有个图标删除不掉|?怎么处理?
  16. java短信接口开发完整项目_java项目接入第三方短信接口
  17. Centos7 Python3.6+Qt5.12.9+ PyQt5.12+Sip v5+QScintilla-2.10+Eric6
  18. Python的大数据之旅(1)---Anaconda与WingIDE安装
  19. ada首届_首届资产商店竞赛获胜者访谈
  20. 马海峰,杨家海,计算机应用,杨家海

热门文章

  1. 安卓桌面软件测试自学,最全的安卓APP专项测试方法!不看悔青肠
  2. Sensor Hub
  3. PromptBERT: Improving BERT Sentence Embeddings with Prompts (通篇翻译)
  4. 9 个建议,助你度过寒冬
  5. 计算机网络与通信技术笔记,自考《计算机网络与通信》笔记(1)
  6. UE4 通过按键升降电梯
  7. (zz)Lambda 表达式(C# 编程指南)
  8. mysql错误:Subquery returns more than 1 row
  9. xtuoj1404菱形 II
  10. nestjs入门(controller,service,module)