新浪password加密算法

获取pubkey,servertime,nonce

Request 
URL: https://login.sina.com.cn/sso/prelogin.php?entry=homepage&callback=pluginSSOController.preloginCallBack&su=MTU1MTc1MDE4MjM%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.19)&_=1559299696271

Rseponse
result: pluginSSOController.preloginCallBack({"retcode":0,"servertime":1559299696,"pcid":"yf-3c26785ab29790e266036d320dd60b62b176","nonce":"19EBDS","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","is_openlock":0,"lm":1,"smsurl":"https:\/\/login.sina.com.cn\/sso\/msglogin?entry=homepage&mobile=15517501823&s=fe7ab7de1d9c2407b3eb45531bac2fb9","showpin":1,"exectime":12})
复制代码

加密过程

var navigator = {};
var sinaSSOEncoder = sinaSSOEncoder || {};
(function () {
        var k = 0;
        var h = 8;
        this.hex_sha1 = function (l) {
            return i(c(g(l), l.length * h))
        }
        ;
        var c = function (B, s) {
            B[s >> 5] |= 128 << (24 - s % 32);
            B[((s + 64 >> 9) << 4) + 15] = s;
            var C = Array(80);
            var A = 1732584193;
            var z = -271733879;
            var y = -1732584194;
            var v = 271733878;
            var u = -1009589776;
            for (var p = 0; p < B.length; p += 16) {
                var r = A;
                var q = z;
                var o = y;
                var n = v;
                var l = u;
                for (var m = 0; m < 80; m++) {
                    if (m < 16) {
                        C[m] = B[p + m]
                    } else {
                        C[m] = e(C[m - 3] ^ C[m - 8] ^ C[m - 14] ^ C[m - 16], 1)
                    }
                    var D = f(f(e(A, 5), a(m, z, y, v)), f(f(u, C[m]), d(m)));
                    u = v;
                    v = y;
                    y = e(z, 30);
                    z = A;
                    A = D
                }
                A = f(A, r);
                z = f(z, q);
                y = f(y, o);
                v = f(v, n);
                u = f(u, l)
            }
            return Array(A, z, y, v, u)
        };
        var a = function (m, l, o, n) {
            if (m < 20) {
                return (l & o) | ((~l) & n)
            }
            if (m < 40) {
                return l ^ o ^ n
            }
            if (m < 60) {
                return (l & o) | (l & n) | (o & n)
            }
            return l ^ o ^ n
        };
        var d = function (l) {
            return (l < 20) ? 1518500249 : (l < 40) ? 1859775393 : (l < 60) ? -1894007588 : -899497514
        };
        var f = function (l, o) {
            var n = (l & 65535) + (o & 65535);
            var m = (l >> 16) + (o >> 16) + (n >> 16);
            return (m << 16) | (n & 65535)
        };
        var e = function (l, m) {
            return (l << m) | (l >>> (32 - m))
        };
        var g = function (o) {
            var n = Array();
            var l = (1 << h) - 1;
            for (var m = 0; m < o.length * h; m += h) {
                n[m >> 5] |= (o.charCodeAt(m / h) & l) << (24 - m % 32)
            }
            return n
        };
        var i = function (n) {
            var m = k ? "0123456789ABCDEF" : "0123456789abcdef";
            var o = "";
            for (var l = 0; l < n.length * 4; l++) {
                o += m.charAt((n[l >> 2] >> ((3 - l % 4) * 8 + 4)) & 15) + m.charAt((n[l >> 2] >> ((3 - l % 4) * 8)) & 15)
            }
            return o
        };
        var j = function (l) {
            var m = ""
                , n = 0;
            for (; n < l.length; n++) {
                m += "%" + b(l[n])
            }
            return decodeURIComponent(m)
        };
        var b = function (l) {
            var m = "0" + l.toString(16);
            return m.length <= 2 ? m : m.substr(1)
        };
        this.base64 = {
            encode: function (n) {
                n = "" + n;
                if (n == "") {
                    return ""
                }
                var l = "";
                var u, s, q = "";
                var t, r, p, o = "";
                var m = 0;
                do {
                    u = n.charCodeAt(m++);
                    s = n.charCodeAt(m++);
                    q = n.charCodeAt(m++);
                    t = u >> 2;
                    r = ((u & 3) << 4) | (s >> 4);
                    p = ((s & 15) << 2) | (q >> 6);
                    o = q & 63;
                    if (isNaN(s)) {
                        p = o = 64
                    } else {
                        if (isNaN(q)) {
                            o = 64
                        }
                    }
                    l = l + this._keys.charAt(t) + this._keys.charAt(r) + this._keys.charAt(p) + this._keys.charAt(o);
                    u = s = q = "";
                    t = r = p = o = ""
                } while (m < n.length);
                return l
            },
            decode: function (t, q, m) {
                var s = function (C, E) {
                    for (var D = 0; D < C.length; D++) {
                        if (C[D] === E) {
                            return D
                        }
                    }
                    return -1
                };
                if (typeof (t) == "string") {
                    t = t.split("")
                }
                var n = [];
                var B, z, w = "";
                var A, y, v, u = "";
                if (t.length % 4 != 0) {
                }
                var l = /[^A-Za-z0-9+\/=]/;
                var x = this._keys.split("");
                if (q == "urlsafe") {
                    l = /[^A-Za-z0-9-_=]/;
                    x = this._keys_urlsafe.split("")
                }
                if (q == "subp_v2") {
                    l = /[^A-Za-z0-9_=-]/;
                    x = this._subp_v2_keys.split("")
                }
                if (q == "subp_v3_3") {
                    l = /[^A-Za-z0-9-_.-]/;
                    x = this._subp_v3_keys_3.split("")
                }
                var p = 0;
                if (q == "binnary") {
                    x = [];
                    for (p = 0; p <= 64; p++) {
                        x[p] = p + 128
                    }
                }
                if (q != "binnary" && l.test(t.join(""))) {
                    return m == "array" ? [] : ""
                }
                p = 0;
                do {
                    A = s(x, t[p++]);
                    y = s(x, t[p++]);
                    v = s(x, t[p++]);
                    u = s(x, t[p++]);
                    B = (A << 2) | (y >> 4);
                    z = ((y & 15) << 4) | (v >> 2);
                    w = ((v & 3) << 6) | u;
                    n.push(B);
                    if (v != 64 && v != -1) {
                        n.push(z)
                    }
                    if (u != 64 && u != -1) {
                        n.push(w)
                    }
                    B = z = w = "";
                    A = y = v = u = ""
                } while (p < t.length);
                if (m == "array") {
                    return n
                }
                var r = ""
                    , o = 0;
                for (; o < n.lenth; o++) {
                    r += String.fromCharCode(n[o])
                }
                return r
            },
            _keys: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
            _keys_urlsafe: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",
            _subp_v2_keys: "uAL715W8e3jJCcNU0lT_FSXVgxpbEDdQ4vKaIOH2GBPtfzqsmYZo-wRM9i6hynrk=",
            _subp_v3_keys_3: "5WFh28sGziZTeS1lBxCK-HgPq9IdMUwknybo.LJrQD3uj_Va7pE0XfcNR4AOYvm6t"
        };
        this.Cookie = {
            decode: function (o) {
                var n = [];
                var m = o.substr(0, 3);
                var l = o.substr(3);
                switch (m) {
                    case "v01":
                        for (var p = 0; p < l.length; p += 2) {
                            n.push(parseInt(l.substr(p, 2), 16))
                        }
                        return decodeURIComponent(j(sinaSSOEncoder.base64.decode(n, "binnary", "array")));
                        break;
                    case "v02":
                        l = l.replace(/\./g, "=");
                        n = sinaSSOEncoder.base64.decode(l, "urlsafe", "array");
                        return j(sinaSSOEncoder.base64.decode(n, "binnary", "array"));
                    default:
                        return decodeURIComponent(o)
                }
            }
        };
        this.getSUBPCookie = {
            __parse: function (o) {
                var y, m, p, n, x, r = 0, q, t = {}, l = "", u = "";
                if (!o) {
                    return t
                }
                do {
                    m = o[r];
                    y = ++r;
                    for (q = r; q < m + y; q++,
                        r++) {
                        l += String.fromCharCode(o[q])
                    }
                    n = o[r];
                    y = ++r;
                    if (l == "status" || l == "flag") {
                        for (q = r; q < n + y; q++,
                            r++) {
                            u += o[q]
                        }
                    } else {
                        u = o.slice(y, n + y);
                        try {
                            u = j(u)
                        } catch (w) {
                            u = ""
                        }
                        r += n
                    }
                    t[l] = u;
                    l = "";
                    u = ""
                } while (r < o.length);
                return t
            },
            decode: function (o) {
                var n = [], p, m = o.substr(0, 3), l = decodeURIComponent(o.substr(3));
                switch (m) {
                    case "002":
                        n = sinaSSOEncoder.base64.decode(l, "subp_v2", "array");
                        return sinaSSOEncoder.getSUBPCookie.__parse(n);
                    case "003":
                        p = l.substr(0, 1);
                        l = l.substr(1);
                        n = sinaSSOEncoder.base64.decode(l, "subp_v3_" + p, "array");
                        return sinaSSOEncoder.getSUBPCookie.__parse(n);
                    default:
                        return decodeURIComponent(o)
                }
            }
        }
    }
).call(sinaSSOEncoder);
(function () {
        var av;
        var ah = 244837814094590;
        var Y = ((ah & 16777215) == 15715070);

        function aq(z, t, az) {
            if (z != null) {
                if ("number" == typeof z) {
                    this.fromNumber(z, t, az)
                } else {
                    if (t == null && "string" != typeof z) {
                        this.fromString(z, 256)
                    } else {
                        this.fromString(z, t)
                    }
                }
            }
        }

        function h() {
            return new aq(null)
        }

        function b(aB, t, z, aA, aD, aC) {
            while (--aC >= 0) {
                var az = t * this[aB++] + z[aA] + aD;
                aD = Math.floor(az / 67108864);
                z[aA++] = az & 67108863
            }
            return aD
        }

        function ax(aB, aG, aH, aA, aE, t) {
            var aD = aG & 32767
                , aF = aG >> 15;
            while (--t >= 0) {
                var az = this[aB] & 32767;
                var aC = this[aB++] >> 15;
                var z = aF * az + aC * aD;
                az = aD * az + ((z & 32767) << 15) + aH[aA] + (aE & 1073741823);
                aE = (az >>> 30) + (z >>> 15) + aF * aC + (aE >>> 30);
                aH[aA++] = az & 1073741823
            }
            return aE
        }

        function aw(aB, aG, aH, aA, aE, t) {
            var aD = aG & 16383
                , aF = aG >> 14;
            while (--t >= 0) {
                var az = this[aB] & 16383;
                var aC = this[aB++] >> 14;
                var z = aF * az + aC * aD;
                az = aD * az + ((z & 16383) << 14) + aH[aA] + aE;
                aE = (az >> 28) + (z >> 14) + aF * aC;
                aH[aA++] = az & 268435455
            }
            return aE
        }

        if (Y && (navigator.appName == "Microsoft Internet Explorer")) {
            aq.prototype.am = ax;
            av = 30
        } else {
            if (Y && (navigator.appName != "Netscape")) {
                aq.prototype.am = b;
                av = 26
            } else {
                aq.prototype.am = aw;
                av = 28
            }
        }
        aq.prototype.DB = av;
        aq.prototype.DM = ((1 << av) - 1);
        aq.prototype.DV = (1 << av);
        var Z = 52;
        aq.prototype.FV = Math.pow(2, Z);
        aq.prototype.F1 = Z - av;
        aq.prototype.F2 = 2 * av - Z;
        var ad = "0123456789abcdefghijklmnopqrstuvwxyz";
        var af = new Array();
        var ao, v;
        ao = "0".charCodeAt(0);
        for (v = 0; v <= 9; ++v) {
            af[ao++] = v
        }
        ao = "a".charCodeAt(0);
        for (v = 10; v < 36; ++v) {
            af[ao++] = v
        }
        ao = "A".charCodeAt(0);
        for (v = 10; v < 36; ++v) {
            af[ao++] = v
        }

        function ay(t) {
            return ad.charAt(t)
        }

        function A(z, t) {
            var az = af[z.charCodeAt(t)];
            return (az == null) ? -1 : az
        }

        function X(z) {
            for (var t = this.t - 1; t >= 0; --t) {
                z[t] = this[t]
            }
            z.t = this.t;
            z.s = this.s
        }

        function n(t) {
            this.t = 1;
            this.s = (t < 0) ? -1 : 0;
            if (t > 0) {
                this[0] = t
            } else {
                if (t < -1) {
                    this[0] = t + DV
                } else {
                    this.t = 0
                }
            }
        }

        function c(t) {
            var z = h();
            z.fromInt(t);
            return z
        }

        function w(aD, z) {
            var aA;
            if (z == 16) {
                aA = 4
            } else {
                if (z == 8) {
                    aA = 3
                } else {
                    if (z == 256) {
                        aA = 8
                    } else {
                        if (z == 2) {
                            aA = 1
                        } else {
                            if (z == 32) {
                                aA = 5
                            } else {
                                if (z == 4) {
                                    aA = 2
                                } else {
                                    this.fromRadix(aD, z);
                                    return
                                }
                            }
                        }
                    }
                }
            }
            this.t = 0;
            this.s = 0;
            var aC = aD.length
                , az = false
                , aB = 0;
            while (--aC >= 0) {
                var t = (aA == 8) ? aD[aC] & 255 : A(aD, aC);
                if (t < 0) {
                    if (aD.charAt(aC) == "-") {
                        az = true
                    }
                    continue
                }
                az = false;
                if (aB == 0) {
                    this[this.t++] = t
                } else {
                    if (aB + aA > this.DB) {
                        this[this.t - 1] |= (t & ((1 << (this.DB - aB)) - 1)) << aB;
                        this[this.t++] = (t >> (this.DB - aB))
                    } else {
                        this[this.t - 1] |= t << aB
                    }
                }
                aB += aA;
                if (aB >= this.DB) {
                    aB -= this.DB
                }
            }
            if (aA == 8 && (aD[0] & 128) != 0) {
                this.s = -1;
                if (aB > 0) {
                    this[this.t - 1] |= ((1 << (this.DB - aB)) - 1) << aB
                }
            }
            this.clamp();
            if (az) {
                aq.ZERO.subTo(this, this)
            }
        }

        function O() {
            var t = this.s & this.DM;
            while (this.t > 0 && this[this.t - 1] == t) {
                --this.t
            }
        }

        function q(z) {
            if (this.s < 0) {
                return "-" + this.negate().toString(z)
            }
            var az;
            if (z == 16) {
                az = 4
            } else {
                if (z == 8) {
                    az = 3
                } else {
                    if (z == 2) {
                        az = 1
                    } else {
                        if (z == 32) {
                            az = 5
                        } else {
                            if (z == 4) {
                                az = 2
                            } else {
                                return this.toRadix(z)
                            }
                        }
                    }
                }
            }
            var aB = (1 << az) - 1, aE, t = false, aC = "", aA = this.t;
            var aD = this.DB - (aA * this.DB) % az;
            if (aA-- > 0) {
                if (aD < this.DB && (aE = this[aA] >> aD) > 0) {
                    t = true;
                    aC = ay(aE)
                }
                while (aA >= 0) {
                    if (aD < az) {
                        aE = (this[aA] & ((1 << aD) - 1)) << (az - aD);
                        aE |= this[--aA] >> (aD += this.DB - az)
                    } else {
                        aE = (this[aA] >> (aD -= az)) & aB;
                        if (aD <= 0) {
                            aD += this.DB;
                            --aA
                        }
                    }
                    if (aE > 0) {
                        t = true
                    }
                    if (t) {
                        aC += ay(aE)
                    }
                }
            }
            return t ? aC : "0"
        }

        function R() {
            var t = h();
            aq.ZERO.subTo(this, t);
            return t
        }

        function ak() {
            return (this.s < 0) ? this.negate() : this
        }

        function G(t) {
            var az = this.s - t.s;
            if (az != 0) {
                return az
            }
            var z = this.t;
            az = z - t.t;
            if (az != 0) {
                return az
            }
            while (--z >= 0) {
                if ((az = this[z] - t[z]) != 0) {
                    return az
                }
            }
            return 0
        }

        function j(z) {
            var aA = 1, az;
            if ((az = z >>> 16) != 0) {
                z = az;
                aA += 16
            }
            if ((az = z >> 8) != 0) {
                z = az;
                aA += 8
            }
            if ((az = z >> 4) != 0) {
                z = az;
                aA += 4
            }
            if ((az = z >> 2) != 0) {
                z = az;
                aA += 2
            }
            if ((az = z >> 1) != 0) {
                z = az;
                aA += 1
            }
            return aA
        }

        function u() {
            if (this.t <= 0) {
                return 0
            }
            return this.DB * (this.t - 1) + j(this[this.t - 1] ^ (this.s & this.DM))
        }

        function ap(az, z) {
            var t;
            for (t = this.t - 1; t >= 0; --t) {
                z[t + az] = this[t]
            }
            for (t = az - 1; t >= 0; --t) {
                z[t] = 0
            }
            z.t = this.t + az;
            z.s = this.s
        }

        function W(az, z) {
            for (var t = az; t < this.t; ++t) {
                z[t - az] = this[t]
            }
            z.t = Math.max(this.t - az, 0);
            z.s = this.s
        }

        function s(aE, aA) {
            var z = aE % this.DB;
            var t = this.DB - z;
            var aC = (1 << t) - 1;
            var aB = Math.floor(aE / this.DB), aD = (this.s << z) & this.DM, az;
            for (az = this.t - 1; az >= 0; --az) {
                aA[az + aB + 1] = (this[az] >> t) | aD;
                aD = (this[az] & aC) << z
            }
            for (az = aB - 1; az >= 0; --az) {
                aA[az] = 0
            }
            aA[aB] = aD;
            aA.t = this.t + aB + 1;
            aA.s = this.s;
            aA.clamp()
        }

        function l(aD, aA) {
            aA.s = this.s;
            var aB = Math.floor(aD / this.DB);
            if (aB >= this.t) {
                aA.t = 0;
                return
            }
            var z = aD % this.DB;
            var t = this.DB - z;
            var aC = (1 << z) - 1;
            aA[0] = this[aB] >> z;
            for (var az = aB + 1; az < this.t; ++az) {
                aA[az - aB - 1] |= (this[az] & aC) << t;
                aA[az - aB] = this[az] >> z
            }
            if (z > 0) {
                aA[this.t - aB - 1] |= (this.s & aC) << t
            }
            aA.t = this.t - aB;
            aA.clamp()
        }

        function aa(z, aA) {
            var az = 0
                , aB = 0
                , t = Math.min(z.t, this.t);
            while (az < t) {
                aB += this[az] - z[az];
                aA[az++] = aB & this.DM;
                aB >>= this.DB
            }
            if (z.t < this.t) {
                aB -= z.s;
                while (az < this.t) {
                    aB += this[az];
                    aA[az++] = aB & this.DM;
                    aB >>= this.DB
                }
                aB += this.s
            } else {
                aB += this.s;
                while (az < z.t) {
                    aB -= z[az];
                    aA[az++] = aB & this.DM;
                    aB >>= this.DB
                }
                aB -= z.s
            }
            aA.s = (aB < 0) ? -1 : 0;
            if (aB < -1) {
                aA[az++] = this.DV + aB
            } else {
                if (aB > 0) {
                    aA[az++] = aB
                }
            }
            aA.t = az;
            aA.clamp()
        }

        function D(z, aA) {
            var t = this.abs()
                , aB = z.abs();
            var az = t.t;
            aA.t = az + aB.t;
            while (--az >= 0) {
                aA[az] = 0
            }
            for (az = 0; az < aB.t; ++az) {
                aA[az + t.t] = t.am(0, aB[az], aA, az, 0, t.t)
            }
            aA.s = 0;
            aA.clamp();
            if (this.s != z.s) {
                aq.ZERO.subTo(aA, aA)
            }
        }

        function Q(az) {
            var t = this.abs();
            var z = az.t = 2 * t.t;
            while (--z >= 0) {
                az[z] = 0
            }
            for (z = 0; z < t.t - 1; ++z) {
                var aA = t.am(z, t[z], az, 2 * z, 0, 1);
                if ((az[z + t.t] += t.am(z + 1, 2 * t[z], az, 2 * z + 1, aA, t.t - z - 1)) >= t.DV) {
                    az[z + t.t] -= t.DV;
                    az[z + t.t + 1] = 1
                }
            }
            if (az.t > 0) {
                az[az.t - 1] += t.am(z, t[z], az, 2 * z, 0, 1)
            }
            az.s = 0;
            az.clamp()
        }

        function E(aH, aE, aD) {
            var aN = aH.abs();
            if (aN.t <= 0) {
                return
            }
            var aF = this.abs();
            if (aF.t < aN.t) {
                if (aE != null) {
                    aE.fromInt(0)
                }
                if (aD != null) {
                    this.copyTo(aD)
                }
                return
            }
            if (aD == null) {
                aD = h()
            }
            var aB = h()
                , z = this.s
                , aG = aH.s;
            var aM = this.DB - j(aN[aN.t - 1]);
            if (aM > 0) {
                aN.lShiftTo(aM, aB);
                aF.lShiftTo(aM, aD)
            } else {
                aN.copyTo(aB);
                aF.copyTo(aD)
            }
            var aJ = aB.t;
            var az = aB[aJ - 1];
            if (az == 0) {
                return
            }
            var aI = az * (1 << this.F1) + ((aJ > 1) ? aB[aJ - 2] >> this.F2 : 0);
            var aQ = this.FV / aI
                , aP = (1 << this.F1) / aI
                , aO = 1 << this.F2;
            var aL = aD.t
                , aK = aL - aJ
                , aC = (aE == null) ? h() : aE;
            aB.dlShiftTo(aK, aC);
            if (aD.compareTo(aC) >= 0) {
                aD[aD.t++] = 1;
                aD.subTo(aC, aD)
            }
            aq.ONE.dlShiftTo(aJ, aC);
            aC.subTo(aB, aB);
            while (aB.t < aJ) {
                aB[aB.t++] = 0
            }
            while (--aK >= 0) {
                var aA = (aD[--aL] == az) ? this.DM : Math.floor(aD[aL] * aQ + (aD[aL - 1] + aO) * aP);
                if ((aD[aL] += aB.am(0, aA, aD, aK, 0, aJ)) < aA) {
                    aB.dlShiftTo(aK, aC);
                    aD.subTo(aC, aD);
                    while (aD[aL] < --aA) {
                        aD.subTo(aC, aD)
                    }
                }
            }
            if (aE != null) {
                aD.drShiftTo(aJ, aE);
                if (z != aG) {
                    aq.ZERO.subTo(aE, aE)
                }
            }
            aD.t = aJ;
            aD.clamp();
            if (aM > 0) {
                aD.rShiftTo(aM, aD)
            }
            if (z < 0) {
                aq.ZERO.subTo(aD, aD)
            }
        }

        function N(t) {
            var z = h();
            this.abs().divRemTo(t, null, z);
            if (this.s < 0 && z.compareTo(aq.ZERO) > 0) {
                t.subTo(z, z)
            }
            return z
        }

        function K(t) {
            this.m = t
        }

        function U(t) {
            if (t.s < 0 || t.compareTo(this.m) >= 0) {
                return t.mod(this.m)
            } else {
                return t
            }
        }

        function aj(t) {
            return t
        }

        function J(t) {
            t.divRemTo(this.m, null, t)
        }

        function H(t, az, z) {
            t.multiplyTo(az, z);
            this.reduce(z)
        }

        function at(t, z) {
            t.squareTo(z);
            this.reduce(z)
        }

        K.prototype.convert = U;
        K.prototype.revert = aj;
        K.prototype.reduce = J;
        K.prototype.mulTo = H;
        K.prototype.sqrTo = at;

        function B() {
            if (this.t < 1) {
                return 0
            }
            var t = this[0];
            if ((t & 1) == 0) {
                return 0
            }
            var z = t & 3;
            z = (z * (2 - (t & 15) * z)) & 15;
            z = (z * (2 - (t & 255) * z)) & 255;
            z = (z * (2 - (((t & 65535) * z) & 65535))) & 65535;
            z = (z * (2 - t * z % this.DV)) % this.DV;
            return (z > 0) ? this.DV - z : -z
        }

        function f(t) {
            this.m = t;
            this.mp = t.invDigit();
            this.mpl = this.mp & 32767;
            this.mph = this.mp >> 15;
            this.um = (1 << (t.DB - 15)) - 1;
            this.mt2 = 2 * t.t
        }

        function ai(t) {
            var z = h();
            t.abs().dlShiftTo(this.m.t, z);
            z.divRemTo(this.m, null, z);
            if (t.s < 0 && z.compareTo(aq.ZERO) > 0) {
                this.m.subTo(z, z)
            }
            return z
        }

        function ar(t) {
            var z = h();
            t.copyTo(z);
            this.reduce(z);
            return z
        }

        function P(t) {
            while (t.t <= this.mt2) {
                t[t.t++] = 0
            }
            for (var az = 0; az < this.m.t; ++az) {
                var z = t[az] & 32767;
                var aA = (z * this.mpl + (((z * this.mph + (t[az] >> 15) * this.mpl) & this.um) << 15)) & t.DM;
                z = az + this.m.t;
                t[z] += this.m.am(0, aA, t, az, 0, this.m.t);
                while (t[z] >= t.DV) {
                    t[z] -= t.DV;
                    t[++z]++
                }
            }
            t.clamp();
            t.drShiftTo(this.m.t, t);
            if (t.compareTo(this.m) >= 0) {
                t.subTo(this.m, t)
            }
        }

        function al(t, z) {
            t.squareTo(z);
            this.reduce(z)
        }

        function y(t, az, z) {
            t.multiplyTo(az, z);
            this.reduce(z)
        }

        f.prototype.convert = ai;
        f.prototype.revert = ar;
        f.prototype.reduce = P;
        f.prototype.mulTo = y;
        f.prototype.sqrTo = al;

        function i() {
            return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
        }

        function x(aE, aF) {
            if (aE > 4294967295 || aE < 1) {
                return aq.ONE
            }
            var aD = h()
                , az = h()
                , aC = aF.convert(this)
                , aB = j(aE) - 1;
            aC.copyTo(aD);
            while (--aB >= 0) {
                aF.sqrTo(aD, az);
                if ((aE & (1 << aB)) > 0) {
                    aF.mulTo(az, aC, aD)
                } else {
                    var aA = aD;
                    aD = az;
                    az = aA
                }
            }
            return aF.revert(aD)
        }

        function am(az, t) {
            var aA;
            if (az < 256 || t.isEven()) {
                aA = new K(t)
            } else {
                aA = new f(t)
            }
            return this.exp(az, aA)
        }

        aq.prototype.copyTo = X;
        aq.prototype.fromInt = n;
        aq.prototype.fromString = w;
        aq.prototype.clamp = O;
        aq.prototype.dlShiftTo = ap;
        aq.prototype.drShiftTo = W;
        aq.prototype.lShiftTo = s;
        aq.prototype.rShiftTo = l;
        aq.prototype.subTo = aa;
        aq.prototype.multiplyTo = D;
        aq.prototype.squareTo = Q;
        aq.prototype.divRemTo = E;
        aq.prototype.invDigit = B;
        aq.prototype.isEven = i;
        aq.prototype.exp = x;
        aq.prototype.toString = q;
        aq.prototype.negate = R;
        aq.prototype.abs = ak;
        aq.prototype.compareTo = G;
        aq.prototype.bitLength = u;
        aq.prototype.mod = N;
        aq.prototype.modPowInt = am;
        aq.ZERO = c(0);
        aq.ONE = c(1);

        function k() {
            this.i = 0;
            this.j = 0;
            this.S = new Array()
        }

        function e(aB) {
            var aA, z, az;
            for (aA = 0; aA < 256; ++aA) {
                this.S[aA] = aA
            }
            z = 0;
            for (aA = 0; aA < 256; ++aA) {
                z = (z + this.S[aA] + aB[aA % aB.length]) & 255;
                az = this.S[aA];
                this.S[aA] = this.S[z];
                this.S[z] = az
            }
            this.i = 0;
            this.j = 0
        }

        function a() {
            var z;
            this.i = (this.i + 1) & 255;
            this.j = (this.j + this.S[this.i]) & 255;
            z = this.S[this.i];
            this.S[this.i] = this.S[this.j];
            this.S[this.j] = z;
            return this.S[(z + this.S[this.i]) & 255]
        }

        k.prototype.init = e;
        k.prototype.next = a;

        function an() {
            return new k()
        }

        var M = 256;
        var m;
        var T;
        var ab;

        function d(t) {
            T[ab++] ^= t & 255;
            T[ab++] ^= (t >> 8) & 255;
            T[ab++] ^= (t >> 16) & 255;
            T[ab++] ^= (t >> 24) & 255;
            if (ab >= M) {
                ab -= M
            }
        }

        function S() {
            d(new Date().getTime())
        }

        if (T == null) {
            T = new Array();
            ab = 0;
            var I;
            if (navigator.appName == "Netscape" && navigator.appVersion < "5" && window.crypto && typeof (window.crypto.random) === "function") {
                var F = window.crypto.random(32);
                for (I = 0; I < F.length; ++I) {
                    T[ab++] = F.charCodeAt(I) & 255
                }
            }
            while (ab < M) {
                I = Math.floor(65536 * Math.random());
                T[ab++] = I >>> 8;
                T[ab++] = I & 255
            }
            ab = 0;
            S()
        }

        function C() {
            if (m == null) {
                S();
                m = an();
                m.init(T);
                for (ab = 0; ab < T.length; ++ab) {
                    T[ab] = 0
                }
                ab = 0
            }
            return m.next()
        }

        function au(z) {
            var t;
            for (t = 0; t < z.length; ++t) {
                z[t] = C()
            }
        }

        function ac() {
        }

        ac.prototype.nextBytes = au;

        function g(z, t) {
            return new aq(z, t)
        }

        function ag(az, aA) {
            var t = "";
            var z = 0;
            while (z + aA < az.length) {
                t += az.substring(z, z + aA) + "\n";
                z += aA
            }
            return t + az.substring(z, az.length)
        }

        function r(t) {
            if (t < 16) {
                return "0" + t.toString(16)
            } else {
                return t.toString(16)
            }
        }

        function ae(aA, aD) {
            if (aD < aA.length + 11) {
                alert("Message too long for RSA");
                return null
            }
            var aC = new Array();
            var az = aA.length - 1;
            while (az >= 0 && aD > 0) {
                var aB = aA.charCodeAt(az--);
                if (aB < 128) {
                    aC[--aD] = aB
                } else {
                    if ((aB > 127) && (aB < 2048)) {
                        aC[--aD] = (aB & 63) | 128;
                        aC[--aD] = (aB >> 6) | 192
                    } else {
                        aC[--aD] = (aB & 63) | 128;
                        aC[--aD] = ((aB >> 6) & 63) | 128;
                        aC[--aD] = (aB >> 12) | 224
                    }
                }
            }
            aC[--aD] = 0;
            var z = new ac();
            var t = new Array();
            while (aD > 2) {
                t[0] = 0;
                while (t[0] == 0) {
                    z.nextBytes(t)
                }
                aC[--aD] = t[0]
            }
            aC[--aD] = 2;
            aC[--aD] = 0;
            return new aq(aC)
        }

        function L() {
            this.n = null;
            this.e = 0;
            this.d = null;
            this.p = null;
            this.q = null;
            this.dmp1 = null;
            this.dmq1 = null;
            this.coeff = null
        }

        function o(z, t) {
            if (z != null && t != null && z.length > 0 && t.length > 0) {
                this.n = g(z, 16);
                this.e = parseInt(t, 16)
            } else {
                alert("Invalid RSA public key")
            }
        }

        function V(t) {
            return t.modPowInt(this.e, this.n)
        }

        function p(az) {
            var t = ae(az, (this.n.bitLength() + 7) >> 3);
            if (t == null) {
                return null
            }
            var aA = this.doPublic(t);
            if (aA == null) {
                return null
            }
            var z = aA.toString(16);
            if ((z.length & 1) == 0) {
                return z
            } else {
                return "0" + z
            }
        }

        L.prototype.doPublic = V;
        L.prototype.setPublic = o;
        L.prototype.encrypt = p;
        this.RSAKey = L
    }
).call(sinaSSOEncoder);

function getuser(username) {
    return sinaSSOEncoder.base64.encode(username);
}

function getpwd(password, pubkey, servertime, nonce) {
    var RSAKey = new sinaSSOEncoder.RSAKey();
    RSAKey.setPublic(pubkey, "10001");
    password = RSAKey.encrypt([servertime, nonce].join("\t") + "\n" + password);
    return password
}

console.log(getuser('19970531'));
console.log(getpwd('970531', 'EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC' +
    '253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9' +
    'B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443',
    1559299696, '19EBDS'));
复制代码

转载于:https://juejin.im/post/5cf10e9cf265da1b6a347b4c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值