当前位置: 首页 > news >正文

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

一、数据接口分析

主页地址:某号站

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));
}

相关文章:

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

一、数据接口分析 主页地址&#xff1a;某号站 1、抓包 通过抓包可以发现登录接口 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现有一个jsondata_rsa的加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无cookie是否…...

linux环境docker安装mysql

1&#xff1a;docker拉取mysql镜像&#xff08;可有自己选择mysql版本&#xff09; [rootlocalhost ~]# docker pull mysql:8.02&#xff1a; Docker 中启动 MySQL 容器&#xff0c;可以使用以下命令&#xff1a; docker run -d --name mysql_container -v ./sql:/docker-…...

taro h5 formData上传图片的坑-Required request part ‘file‘ is not present

描述&#xff1a;用formData上传图片 1、生成formData const formData new FormData() formData.append(file, data) // data是file formData.append(xxx, xxx) // 添加其他参数2、用taro.request请求 Taro.request({url: xxxx,data: formData,header: {Content-Type: mult…...

GNU GRUB version 2.06 Minimal Bash-lke line editing is supported 问题修复

一、问题背景 博主喜欢折腾系统&#xff0c;电脑原来有一个windows系统&#xff0c;想整一个Linux双系统&#xff0c;结果开机时出现以下画面&#xff1a; GNU GRUB version 2.06 Minimal Bash-lke line editing is supported. TAB lists possible comand completions, Anywh…...

Embedding 向量生成GPT数据使用相关

如果使用python3.6的版本&#xff0c;使用pycharm创建工程&#xff0c;那么默认会使用 docx包&#xff0c;这样运行程序会爆异常&#xff0c;突然想起以前请教的一个大神&#xff0c;想当 初&#xff0c;这个问题困扰了我 两天时间&#xff0c;在此记录一下&#xff1a; pytho…...

Jenkins工具系列 —— 配置邮箱 每个job下动态设置临时发送人

文章目录 安装插件添加邮箱认证邮箱申请&#xff08;以QQ邮箱网页为例&#xff09;jenkins添加邮箱认证 jenkins设置邮箱相关信息配置全局邮件单个JOB邮箱配置 安装插件 点击 左侧的 Manage Jenkins —> Plugins ——> 左侧的 Available plugins 添加邮箱认证 邮箱申请…...

华纳云:ubuntu中怎么查看进程占用的端口

在Ubuntu中&#xff0c;你可以使用以下命令来查看进程占用的端口&#xff1a; 打开终端&#xff08;Terminal&#xff09;。 使用 netstat 命令来查看进程占用的端口。以下是几个常用的命令示例&#xff1a; 查看所有进程占用的端口和地址&#xff1a; netstat -tuln 查看TCP端…...

【学会动态规划】 最长递增子序列(26)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…...

Azure虚拟网络对等互连

什么是Azure虚拟网络对等互联 Azure虚拟网络对等互联&#xff08;Azure Virtual Network peering&#xff09;是一种连接两个虚拟网络的方法&#xff0c;使得这两个虚拟网络能够在同一地理区域内进行通信。它通过私有IP地址在虚拟网络之间建立网络连接&#xff0c;不论是在同一…...

CTFhub-sql-整数注入

判断存在 sqli 注入 1 1 and 11 1 and 12 因为 11 为真&#xff0c;12 为假&#xff0c;且 11 与 1 显示的数据一样&#xff0c;那么就存在 sqli 注入 查询该数据表的字段数量 一、 2 3 1,2成功带出数据&#xff0c;3没有数据&#xff0c;所以有两个字段 二、 1 order by …...

管理类联考——逻辑——真题篇——按知识分类——汇总篇——二、论证逻辑——归纳——第三节 归纳论证有效性

文章目录 第三节 归纳论证有效性真题(2007-37)——归纳——归纳论证有效性——两面验证法真题(2000-60)——归纳——归纳论证有效性——构造对照组实验真题(2001-44)——归纳——归纳论证有效性——寻找针对该缺陷的选项第三节 归纳论证有效性 真题(2007-37)——归纳—…...

PaddleRS 1.0.0版本安装

PaddleRS 1.0.0版本安装 PaddleRS是百度飞桨、遥感科研院所及相关高校共同开发的基于飞桨的遥感影像智能解译开发套件&#xff0c; 支持图像分割、目标检测、场景分类、变化检测、图像复原等常见遥感任务。 PaddleRS致力于帮助遥感领域科研从业者快速完成算法的研发、验证和调…...

三维重建 PyQt Python MRP 四视图(横断面,冠状面,矢状面,3D)

本文实现了 Python MPR 的 四视图&#xff0c;横断面&#xff0c;冠状面&#xff0c;矢状面&#xff0c;3D MPR(multi-planner reformation)也称多平面重建&#xff0c;多重面重建是将扫描范围内所有的轴位图像叠加起来再对某些标线标定的重组线所指定的组织进行冠状、矢状位、…...

使用vscode编写插件-php语言

https://blog.csdn.net/qq_45701130/article/details/125206645 一、环境搭建 1、安装 Visual Studio Code 2、安装 Node.js 3、安装 Git 4、安装生产插件代码的工具&#xff1a;npm install -g yo generator-code 二、创建工程 yo code 选择项解释&#xff1a; 选择编写扩…...

【笔记】Spark3 AQE(Adaptive Query Execution)

提效 7 倍&#xff0c;Apache Spark 自适应查询优化在网易的深度实践及改进 Performance Tuning 配置Spark SQL开启Adaptive Execution特性 How To Use Spark Adaptive Query Execution (AQE) in Kyuubi 【spark系列3】spark 3.0.1 AQE(Adaptive Query Exection)分析 玩转Spark…...

【雷达】接收和去噪L波段雷达接收到的信号研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

【云原生】Docker Cgroups资源控制管理

目录 一、cgroups简介 cgroups有四大功能&#xff1a; 二、cpu时间片的概念 三、对CPU使用的限制 3.1 设置CPU使用率上限 &#xff08;1&#xff09;查看容器的默认CPU使用限制 &#xff08;2&#xff09;进行压力测试 &#xff08;3&#xff09;创建容器时设置CPU使用时…...

k8s部署prometheus

1、prometheus部署yml文件地址 github地址 2、下载yml文件 rootiZj6cd9joygowsf7am5hryZ:~# git clone https://github.com/redhatxl/k8s-prometheus-grafana.git Cloning into k8s-prometheus-grafana... remote: Enumerating objects: 21, done. remote: Total 21 (delta 0)…...

飞书小程序开发

1.tt.showModal后跳转页面 跳转路径要为绝对路径&#xff0c;相对路径跳转无响应。 2.手机息屏后将不再进入onload()生命周期&#xff0c;直接进入onshow()生命周期。 onLoad()在页面初始化的时候触发&#xff0c;一个页面只调用一次。 onShow()在切入前台时就会触发&#x…...

Revit 3D高效处理:cad exchanger sdk 3.21 Crack

3D 格式概述&#xff1a;Revit Revit 已成为寻求高效、准确的建筑信息建模的专业人士的首选解决方案。在这篇引人入胜的功能概述中了解 Revit 的特性和影响。 什么是Revit&#xff1f; Autodesk Revit 是一款流行的 CAD 软件&#xff0c;重点关注 BIM&#xff0c;被建筑师、工…...

【已解决】Linux中启动docker 出现 ‘ Failed to start docker.service: Unit not found. ’ 错误

启动docker 出现 ‘ Failed to start docker.service: Unit not found. ’ 错误 这是因为缺少 rhel-push-plugin.socket 单元&#xff0c;该单元是rhel-push-plugin软件包的一部分。所以我们执行以下指令就可以成功解决&#xff1a; curl -sSL https://get.docker.com/ | sh 执…...

【学习日记】【FreeRTOS】时间片的实现

前言 本文以野火的教程和代码为基础&#xff0c;对 FreeRTOS 中时间片的概念作了解释&#xff0c;并且给出了实现方式&#xff0c;同时发现并解决了野火教程代码中的 bug。 一、时间片是什么 在前面的文章中&#xff0c;我们已经知道任务根据不同的优先级被放入就绪列表中不…...

CentOS Docker仓库和代理配置

无法直接访问外部网络时&#xff0c;除了Host自己的全局代理设置之外&#xff0c;需要单独给Docker Client和Instance设置代理。 如执行docker run时遇到下面的错误 docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 3.216.…...

Lnton羚通算法算力云平台在环境配置中Windows10终端和VSCode下如何打开Anaconda-Prompt

在Windows 10的终端和VSCode中&#xff0c;可以直接打开Anaconda Prompt。下面是两种方法&#xff1a; Windows 10终端&#xff1a;在开始菜单中搜索"Anaconda Prompt"&#xff0c;然后点击打开。这将启动Anaconda Prompt终端&#xff0c;你可以在其中执行conda相关命…...

Python web实战之细说Django的集成测试

关键词&#xff1a; Python Web开发、Django、集成测试、实战、测试驱动开发、自动化测试、Selenium、测试框架、测试用例、代码覆盖率、持续集成 今天给大家分享一下Python Web开发——Django的集成测试&#xff0c;如何利用集成测试来提高代码质量、减少bug。 1. 什么是集成…...

Laravel 模型的作用域 模型的访问器和修改器 ⑨

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…...

每日一学——交换机

交换机是一种网络设备&#xff0c;用于连接多台计算机和其他网络设备&#xff0c;以实现数据的交换和传输。它通过将数据包在不同端口之间转发&#xff0c;将数据从一个设备发送到目标设备。交换机可以提供高速、可靠和安全的局域网连接。 交换机的工作原理是根据目标MAC地址来…...

数学建模大全及优缺点解读

分类模型 1、距离聚类&#xff08;系统聚类&#xff09;&#xff08;常用&#xff0c;需掌握&#xff09; 优点&#xff1a; ①将一批样本数据按照他们在性质上的亲密程度在没有先验知识的情况下自动进行分类 ②是一种探索性的分析方法&#xff0c;分类结果不一定相同 例如&am…...

C++简介

文章目录 C简介C版本C11例子 C14例子 C17C20例子 C简介 C是一种高级编程语言&#xff0c;它是对C语言的扩展和增强。C由Bjarne Stroustrup于1980年发明&#xff0c;主要用于系统级编程、游戏开发、嵌入式系统等领域。 C具有许多特性&#xff0c;其中最重要的是面向对象编程&a…...

【广州华锐互动】3D空间编辑器:一款简洁易用的VR/3D在线编辑工具

随着虚拟现实技术的不断发展&#xff0c;数字孪生技术的应用已经被广泛应用于产品设计和制作中&#xff0c;能充分发挥企业应用3D建模的优势&#xff0c;凸显了三维设计的价值&#xff0c;在生产阶段也能够充分发挥3D模型的作用。 如今&#xff0c;广州华锐互动开发的3D空间编辑…...

golang云原生项目☞redis配置

配置redis适用与golang云原生架构。包括redis与数据库一致性等重要内容 1、编写redis配置文件、使用viper读取 配置文件 db.yml redis:addr: 127.0.0.1port: 6379password: tiktokRedisdb: 0 # 数据库编号读取配置文件 var (config viper.Init("db")zapL…...

C++ malloc/free/new/delete详解(内存管理)

C malloc/free/new/delete详解&#xff08;内存管理&#xff09; malloc/free典型用法内存分配实现过程brk和mmap申请小于128k的内存申请大于128k的内存释放内存brk和mmap的区别 new/delete典型用法 内存分配实现过程new/delete和malloc/free的区别malloc对于给每个进程分配的内…...

SpringBoot中Mapper.xml的入参方式

在SpringBoot开发过程中&#xff0c;我们使用 ***Mapper.xml***Mapper.java 来封装对数据库表的 CURD 操作&#xff0c;正常每张表会有一组对应的文件。 一、Mapper常见用法 下面例举一个查询操作&#xff1a; 数据表t_sap_customer&#xff0c;表中有字段id、code、name、c…...

回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#…...

浅析Python爬虫ip程序延迟和吞吐量影响因素

作为一名资深的爬虫程序员&#xff0c;今天我们很有必要来聊聊Python爬虫ip程序的延迟和吞吐量&#xff0c;这是影响我们爬取效率的重要因素。这里我们会提供一些实用的解决方案&#xff0c;让你的爬虫程序飞起来&#xff01; 网络延迟 首先&#xff0c;让我们来看看网络延迟对…...

【100天精通python】Day43:python网络爬虫开发_爬虫基础(urlib库、Beautiful Soup库、使用代理+实战代码)

目录 1 urlib 库 2 Beautiful Soup库 3 使用代理 3.1 代理种类 HTTP、HTTPS 和 SOCKS5 3.2 使用 urllib 和 requests 库使用代理 3.3 案例&#xff1a;自建代理池 4 实战 提取视频信息并进行分析 1 urlib 库 urllib 是 Python 内置的标准库&#xff0c;用于处理URL、发送…...

Linux:安全技术与防火墙

目录 一、安全技术 1.安全技术 2.防火墙的分类 3.防水墙 4.netfilter/iptables关系 二、防火墙 1、iptables四表五链 2、黑白名单 3.iptables命令 3.1查看filter表所有链 iptables -L ​编辑3.2用数字形式(fliter)表所有链 查看输出结果 iptables -nL 3.3 清空所有链…...

Confluent kafka 异常退出rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack

rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack 根据网上的例子&#xff0c;做了一个测试程序。 C# 操作Kafka_c# kafka_Riven Chen的博客-CSDN博客 但是执行下面一行时&#xff0c;弹出上面的异常&#xff0c;闪退。 consumer.Subscribe(queueName) 解决方案&…...

最新ChatGPT网站程序源码+AI系统+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…...

chatGPT-对话柏拉图

引言&#xff1a; 古希腊哲学家柏拉图&#xff0c;在他的众多著作中&#xff0c;尤以《理想国》为人所熟知。在这部杰作中&#xff0c;他勾勒了一个理想的政治制度&#xff0c;提出了各种政体&#xff0c;并阐述了他对于公正、智慧以及政治稳定的哲学观点。然而&#xff0c;其…...

Java项目-苍穹外卖-Day04

公共字段自动填充 这些字段在每张表基本都有&#xff0c;手动进行填充效率低&#xff0c;且后期维护更改繁琐 使用到注解AOP主要 先答应一个AutoFill注解 再定义一个切面类进行通知 对应代码 用到了枚举类和反射 package com.sky.aspect; /*** 自定义切面类&#xff0c…...

SQL递归获取完整的树形结构数据

在 SQL 中&#xff0c;WITH RECURSIVE 用于创建递归查询&#xff0c;它允许在查询中引用自身。这种查询通常用于处理具有层次结构的数据&#xff0c;例如树形结构。 以下是使用 WITH RECURSIVE 创建递归查询的一般语法&#xff1a; WITH RECURSIVE [alias] ([column1], [colu…...

如何使用营销活动,提升小程序用户的参与度

在当今数字化时代&#xff0c;小程序已成为企业私域营销的重要一环。然而&#xff0c;仅仅拥有小程序还不足以吸引用户的兴趣和参与。营销活动作为推动用户参与的有效手段&#xff0c;可以在激烈的市场竞争中脱颖而出。本文将深入探讨如何使用营销活动&#xff0c;提升小程序用…...

IDEA中使用Docker插件构建镜像并推送至私服Harbor

一、开启Docker服务器的远程访问 1.1 开启2375远程访问 默认的dokcer是不支持远程访问的&#xff0c;需要加点配置&#xff0c;开启Docker的远程访问 # 首先查看docker配置文件所在位置 systemctl status docker# 会输出如下内容&#xff1a; ● docker.service - Docker Ap…...

第7章 高性能门户首页构建

mini商城第7章 高性能门户首页构建 一、课题 高性能门户建设 二、回顾 1、了解文件存储系统的概念 2、了解常用文件服务器的区别 3、掌握Minio的应用 三、目标 1、OpenResty 百万并发站点架构 OpenResty 特性介绍 搭建OpenResty Web站点动静分离方案剖析 2、多级缓存架…...

用加持了大模型的 Byzer-Notebook 做数据分析是什么体验

Byzer-Notebook 是专门为 SQL 而研发的一款 Web Notebook。他的第一公民是 SQL&#xff0c;而 Jupyter 则是是以 Python 为第一公民的。 随着 Byzer 引擎对大模型能力的支持日渐完善&#xff0c; Byzer-Notebook 也在不自觉中变得更加强大。我和小伙伴在聊天的过程中才发现他已…...

学习设计模式之观察者模式,但是宝可梦

前言 作者在准备秋招中&#xff0c;学习设计模式&#xff0c;做点小笔记&#xff0c;用宝可梦为场景举例&#xff0c;有错误欢迎指出。 观察者模式 观察者模式定义了一种一对多的依赖关系&#xff0c;一个对象的状态改变&#xff0c;其他所有依赖者都会接收相应的通知。 所…...

课程项目设计--spring security--用户管理功能--宿舍管理系统--springboot后端

写在前面&#xff1a; 还要实习&#xff0c;每次时间好少呀&#xff0c;进度会比较慢一点 本文主要实现是用户管理相关功能。 前文项目建立 文章目录 验证码功能验证码配置验证码生成工具类添加依赖功能测试编写controller接口启动项目 security配置拦截器配置验证码拦截器 …...

学习设计模式之装饰器模式,但是宝可梦

装饰模式 为了不改变组件的结构&#xff0c;动态地扩展其功能。 通常&#xff0c;扩展功能通过子类进行&#xff0c;但是继承的方式具有静态特征&#xff0c;耦合度高。 意图&#xff1a;动态地给对象添加额外的功能 主要解决&#xff1a;继承方式是静态特征&#xff0c;扩…...

【AWS】创建IAM用户;无法登录IAM用户怎么办?错误提示:您的身份验证信息错误,请重试(已解决)

目录 0.背景问题分析 1.解决步骤 0.背景问题分析 windows 11 &#xff0c;64位 我的问题情景&#xff1a; 首先我创建了aws的账户&#xff0c;并且可以用ROOT用户登录&#xff0c;但是在登录时选择IAM用户&#xff0c;输入ROOT的名字和密码&#xff0c;就会提示【您的身份验证…...