开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1534|回复: 3
收起左侧

[已解决] 求解密JS调用

 关闭 [复制链接]
结帖率:67% (36/54)
发表于 2013-7-1 00:54:49 | 显示全部楼层 |阅读模式   江苏省南通市
5精币
<html>
<head>
<script>
var dbits;
var canary = 0xdeadbeefcafe;
var j_lm = ((canary & 0xffffff) == 0xefcafe);
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);
}
function nbi() {
    return new BigInteger(null);
}
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;
}
function am2(i, x, w, j, c, n) {
    var xl = x & 0x7fff,
    xh = x >> 15;
    while (--n >= 0) {
        var l = this & 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;
}
function am3(i, x, w, j, c, n) {
    var xl = x & 0x3fff,
    xh = x >> 14;
    while (--n >= 0) {
        var l = this & 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 {
    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(n) {
    return BI_RM.charAt(n);
}
function intAt(s, i) {
    var c = BI_RC[s.charCodeAt(i)];
    return (c == null) ? -1 : c;
}
function bnpCopyTo(r) {
    for (var i = this.t - 1; i >= 0; --i) r = this;
    r.t = this.t;
    r.s = this.s;
}
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;
}
function nbv(i) {
    var r = nbi();
    r.fromInt(i);
    return r;
}
function bnpFromString(s, b) {
    var k;
    if (b == 16) k = 4;
    else if (b == 8) k = 3;
    else if (b == 256) k = 8;
    else 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 & 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));
        } else this[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);
}
function bnpClamp() {
    var c = this.s & this.DM;
    while (this.t > 0 && this[this.t - 1] == c)--this.t;
}
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 >> p) > 0) {
            m = true;
            r = int2char(d);
        }
        while (i >= 0) {
            if (p < k) {
                d = (this & ((1 << p) - 1)) << (k - p);
                d |= this[--i] >> (p += this.DB - k);
            } else {
                d = (this >> (p -= k)) & km;
                if (p <= 0) {
                    p += this.DB; --i;
                }
            }
            if (d > 0) m = true;
            if (m) r += int2char(d);
        }
    }
    return m ? r: "0";
}
function bnNegate() {
    var r = nbi();
    BigInteger.ZERO.subTo(this, r);
    return r;
}
function bnAbs() {
    return (this.s < 0) ? this.negate() : this;
}
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 - a) != 0) return r;
    return 0;
}
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;
}
function bnBitLength() {
    if (this.t <= 0) return 0;
    return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));
}
function bnpDLShiftTo(n, r) {
    var i;
    for (i = this.t - 1; i >= 0; --i) r[i + n] = this;
    for (i = n - 1; i >= 0; --i) r = 0;
    r.t = this.t + n;
    r.s = this.s;
}
function bnpDRShiftTo(n, r) {
    for (var i = n; i < this.t; ++i) r[i - n] = this;
    r.t = Math.max(this.t - n, 0);
    r.s = this.s;
}
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 >> cbs) | c;
        c = (this & bm) << bs;
    }
    for (i = ds - 1; i >= 0; --i) r = 0;
    r[ds] = c;
    r.t = this.t + ds + 1;
    r.s = this.s;
    r.clamp();
}
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 & bm) << cbs;
        r[i - ds] = this >> bs;
    }
    if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;
    r.t = this.t - ds;
    r.clamp();
}
function bnpSubTo(a, r) {
    var i = 0,
    c = 0,
    m = Math.min(a.t, this.t);
    while (i < m) {
        c += this - a;
        r[i++] = c & this.DM;
        c >>= this.DB;
    }
    if (a.t < this.t) {
        c -= a.s;
        while (i < this.t) {
            c += this;
            r[i++] = c & this.DM;
            c >>= this.DB;
        }
        c += this.s;
    } else {
        c += this.s;
        while (i < a.t) {
            c -= a;
            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();
}
function bnpMultiplyTo(a, r) {
    var x = this.abs(),
    y = a.abs();
    var i = x.t;
    r.t = i + y.t;
    while (--i >= 0) r = 0;
    for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y, r, i, 0, x.t);
    r.s = 0;
    r.clamp();
    if (this.s != a.s) BigInteger.ZERO.subTo(r, r);
}
function bnpSquareTo(r) {
    var x = this.abs();
    var i = r.t = 2 * x.t;
    while (--i >= 0) r = 0;
    for (i = 0; i < x.t - 1; ++i) {
        var c = x.am(i, x, r, 2 * i, 0, 1);
        if ((r[i + x.t] += x.am(i + 1, 2 * x, 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, r, 2 * i, 0, 1);
    r.s = 0;
    r.clamp();
}
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]);
    if (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);
    while (y.t < ys) y[y.t++] = 0;
    while (--j >= 0) {
        var qd = (r[--i] == y0) ? this.DM: Math.floor(r * d1 + (r[i - 1] + e) * d2);
        if ((r += y.am(0, qd, r, j, 0, ys)) < qd) {
            y.dlShiftTo(j, t);
            r.subTo(t, r);
            while (r < --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);
    if (ts < 0) BigInteger.ZERO.subTo(r, r);
}
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;
}
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;
function bnpInvDigit() {
    if (this.t < 1) return 0;
    var x = this[0];
    if ((x & 1) == 0) return 0;
    var y = x & 3;
    y = (y * (2 - (x & 0xf) * y)) & 0xf;
    y = (y * (2 - (x & 0xff) * y)) & 0xff;
    y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff;
    y = (y * (2 - x * y % this.DV)) % this.DV;
    return (y > 0) ? this.DV - y: -y;
}
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;
}
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;
}
function montRevert(x) {
    var r = nbi();
    x.copyTo(r);
    this.reduce(r);
    return r;
}
function montReduce(x) {
    while (x.t <= this.mt2) x[x.t++] = 0;
    for (var i = 0; i < this.m.t; ++i) {
        var j = x & 0x7fff;
        var u0 = (j * this.mpl + (((j * this.mph + (x >> 15) * this.mpl) & this.um) << 15)) & x.DM;
        j = i + this.m.t;
        x[j] += this.m.am(0, u0, x, i, 0, this.m.t);
        while (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);
}
function montSqrTo(x, r) {
    x.squareTo(r);
    this.reduce(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;
function bnpIsEven() {
    return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;
}
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);
}
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);
}
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 Arcfour() {
    this.i = 0;
    this.j = 0;
    this.S = new Array();
}
function ARC4init(key) {
    var i, j, t;
    for (i = 0; i < 256; ++i) this.S = i;
    j = 0;
    for (i = 0; i < 256; ++i) {
        j = (j + this.S + key[i % key.length]) & 255;
        t = this.S;
        this.S = 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;
function prng_newstate() {
    return new Arcfour();
}
var rng_psize = 256;
var rng_state;
var rng_pool;
var rng_pptr;
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;
}
function rng_seed_time() {
    rng_seed_int(new Date().getTime());
}
if (rng_pool == null) {
    rng_pool = new Array();
    rng_pptr = 0;
    var t;
    if (navigator.appName == "Netscape" && navigator.appVersion < "5" && window.crypto) {
        var 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) {
        t = Math.floor(65536 * Math.random());
        rng_pool[rng_pptr++] = t >>> 8;
        rng_pool[rng_pptr++] = t & 255;
    }
    rng_pptr = 0;
    rng_seed_time();
}
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;
    }
    return rng_state.next();
}
function rng_get_bytes(ba) {
    var i;
    for (i = 0; i < ba.length; ++i) ba = rng_get_byte();
}
function SecureRandom() {}
SecureRandom.prototype.nextBytes = rng_get_bytes;
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);
    else return b.toString(16);
}
function pkcs1pad2(s, n) {
    //2位长度+pin+rnd
    if (n < s.length + 2) {
        alert("密码太长!");
        return null;
    }
    var ba = new Array();
    var i = s.length - 1;
    var len = s.length;
    if (len < 100) {
        ba[0] = 0x30 + len / 10;
        ba[1] = 0x30 + len % 10;
    } else {
        alert("密码太长!");
        return null;
    }
    var j = 2;
    i = 0;
    while (i < len && n > 0) {
        ba[j++] = s.charCodeAt(i++);
    }
    var rng = new SecureRandom();
    var x = new Array();
    while (j < n) {
        x[0] = 0;
        while (x[0] == 0) rng.nextBytes(x);
        ba[j++] = x[0];
    }
    return new BigInteger(ba);
}
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;
}
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);
    } else alert("Invalid RSA public key");
}
function RSADoPublic(x) {
    return x.modPowInt(this.e, this.n);
}
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).toUpperCase();
    //if((h.length & 1) == 0)
    // return h;
    // else
    //  return "0" + h;
    var gapLen = 256 - h.length;
    for (var i = 0; i < gapLen; i = i + 1) {
        h = "0" + h;
    }
    return h;
}
RSAKey.prototype.doPublic = RSADoPublic;
RSAKey.prototype.setPublic = RSASetPublic;
RSAKey.prototype.encrypt = RSAEncrypt;
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;
}
function b64tohex(s) {
    var ret = ""
    var i;
    var k = 0;
    var 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;
}
function b64toBA(s) {
    var h = b64tohex(s);
    var i;
    var a = new Array();
    for (i = 0; 2 * i < h.length; ++i) {
        a = parseInt(h.substring(2 * i, 2 * i + 2), 16);
    }
    return a;
}
function liuhjtest(pwd) {
    var PublicKey = "B1204FC8EB406948947F0F69E460BFEA19E778D7D3619AFE3EBEF3CEACA10A289F303E3EA717850757B43948FC3C6AE766B4AA8A08F927F976A0313DCB6054860DFF1CDE7DF5C87E2E3147CC9DCDDF31C97282B975088DF94679A4F1E53EFEBF68FC3717D28D00E51BED299CB1815777265B0DB4576CC314C82612277626F82D";
    var RSA = new RSAKey();
    RSA.setPublic(PublicKey, "10001");
    var Res = RSA.encrypt(pwd);
    return Res;
}
</script>
</head>
<body>
<a href="javascript:;" onclick=alert(liuhjtest("qqq123123"))>加密</a>
</body>
</html>



补充内容 (2013-7-1 01:28):
好像什么代码要改

最佳答案

查看完整内容

可以了 自己运行试试

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

结帖率:100% (17/17)
发表于 2013-7-1 00:54:50 | 显示全部楼层   广东省*
  1. var navigator=navigator||{};
  2. var dbits;
  3. var canary = 0xdeadbeefcafe;
  4. var j_lm = ((canary & 0xffffff) == 0xefcafe);
  5. function BigInteger(a, b, c) {
  6.     if (a != null) if ("number" == typeof a) this.fromNumber(a, b, c);
  7.     else if (b == null && "string" != typeof a) this.fromString(a, 256);
  8.     else this.fromString(a, b);
  9. }

  10. function nbi() {
  11.     return new BigInteger(null);
  12. }

  13. function am1(i, x, w, j, c, n) {
  14.     while (--n >= 0) {
  15.         var v = x * this[i++] + w[j] + c;
  16.         c = Math.floor(v / 0x4000000);
  17.         w[j++] = v & 0x3ffffff;
  18.     }
  19.     return c;
  20. }

  21. function am2(i, x, w, j, c, n) {
  22.     var xl = x & 0x7fff,
  23.     xh = x >> 15;
  24.     while (--n >= 0) {
  25.         var l = this[i] & 0x7fff;
  26.         var h = this[i++] >> 15;
  27.         var m = xh * l + h * xl;
  28.         l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);
  29.         c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);
  30.         w[j++] = l & 0x3fffffff;
  31.     }
  32.     return c;
  33. }
  34. function am3(i, x, w, j, c, n) {
  35.     var xl = x & 0x3fff,
  36.     xh = x >> 14;
  37.     while (--n >= 0) {
  38.         var l = this[i] & 0x3fff;
  39.         var h = this[i++] >> 14;
  40.         var m = xh * l + h * xl;
  41.         l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;
  42.         c = (l >> 28) + (m >> 14) + xh * h;
  43.         w[j++] = l & 0xfffffff;
  44.     }
  45.     return c;
  46. }
  47. if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
  48.     BigInteger.prototype.am = am2;
  49.     dbits = 30;
  50. } else if (j_lm && (navigator.appName != "Netscape")) {
  51.     BigInteger.prototype.am = am1;
  52.     dbits = 26;
  53. } else {
  54.     BigInteger.prototype.am = am3;
  55.     dbits = 28;
  56. }
  57. BigInteger.prototype.DB = dbits;
  58. BigInteger.prototype.DM = ((1 << dbits) - 1);
  59. BigInteger.prototype.DV = (1 << dbits);
  60. var BI_FP = 52;
  61. BigInteger.prototype.FV = Math.pow(2, BI_FP);
  62. BigInteger.prototype.F1 = BI_FP - dbits;
  63. BigInteger.prototype.F2 = 2 * dbits - BI_FP;
  64. var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
  65. var BI_RC = new Array();
  66. var rr, vv;
  67. rr = "0".charCodeAt(0);
  68. for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv;
  69. rr = "a".charCodeAt(0);
  70. for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
  71. rr = "A".charCodeAt(0);
  72. for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv;
  73. function int2char(n) {
  74.     return BI_RM.charAt(n);
  75. }
  76. function intAt(s, i) {
  77.     var c = BI_RC[s.charCodeAt(i)];
  78.     return (c == null) ? -1 : c;
  79. }
  80. function bnpCopyTo(r) {
  81.     for (var i = this.t - 1; i >= 0; --i) r[i] = this[i];
  82.     r.t = this.t;
  83.     r.s = this.s;
  84. }
  85. function bnpFromInt(x) {
  86.     this.t = 1;
  87.     this.s = (x < 0) ? -1 : 0;
  88.     if (x > 0) this[0] = x;
  89.     else if (x < -1) this[0] = x + DV;
  90.     else this.t = 0;
  91. }
  92. function nbv(i) {
  93.     var r = nbi();
  94.     r.fromInt(i);
  95.     return r;
  96. }
  97. function bnpFromString(s, b) {
  98.     var k;
  99.     if (b == 16) k = 4;
  100.     else if (b == 8) k = 3;
  101.     else if (b == 256) k = 8;
  102.     else if (b == 2) k = 1;
  103.     else if (b == 32) k = 5;
  104.     else if (b == 4) k = 2;
  105.     else {
  106.         this.fromRadix(s, b);
  107.         return;
  108.     }
  109.     this.t = 0;
  110.     this.s = 0;
  111.     var i = s.length,
  112.     mi = false,
  113.     sh = 0;
  114.     while (--i >= 0) {
  115.         var x = (k == 8) ? s[i] & 0xff: intAt(s, i);
  116.         if (x < 0) {
  117.             if (s.charAt(i) == "-") mi = true;
  118.             continue;
  119.         }
  120.         mi = false;
  121.         if (sh == 0) this[this.t++] = x;
  122.         else if (sh + k > this.DB) {
  123.             this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;
  124.             this[this.t++] = (x >> (this.DB - sh));
  125.         } else this[this.t - 1] |= x << sh;
  126.         sh += k;
  127.         if (sh >= this.DB) sh -= this.DB;
  128.     }
  129.     if (k == 8 && (s[0] & 0x80) != 0) {
  130.         this.s = -1;
  131.         if (sh > 0) this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;
  132.     }
  133.     this.clamp();
  134.     if (mi) BigInteger.ZERO.subTo(this, this);
  135. }
  136. function bnpClamp() {
  137.     var c = this.s & this.DM;
  138.     while (this.t > 0 && this[this.t - 1] == c)--this.t;
  139. }
  140. function bnToString(b) {
  141.     if (this.s < 0) return "-" + this.negate().toString(b);
  142.     var k;
  143.     if (b == 16) k = 4;
  144.     else if (b == 8) k = 3;
  145.     else if (b == 2) k = 1;
  146.     else if (b == 32) k = 5;
  147.     else if (b == 4) k = 2;
  148.     else return this.toRadix(b);
  149.     var km = (1 << k) - 1,
  150.     d,
  151.     m = false,
  152.     r = "",
  153.     i = this.t;
  154.     var p = this.DB - (i * this.DB) % k;
  155.     if (i-->0) {
  156.         if (p < this.DB && (d = this[i] >> p) > 0) {
  157.             m = true;
  158.             r = int2char(d);
  159.         }
  160.         while (i >= 0) {
  161.             if (p < k) {
  162.                 d = (this[i] & ((1 << p) - 1)) << (k - p);
  163.                 d |= this[--i] >> (p += this.DB - k);
  164.             } else {
  165.                 d = (this[i] >> (p -= k)) & km;
  166.                 if (p <= 0) {
  167.                     p += this.DB; --i;
  168.                 }
  169.             }
  170.             if (d > 0) m = true;
  171.             if (m) r += int2char(d);
  172.         }
  173.     }
  174.     return m ? r: "0";
  175. }
  176. function bnNegate() {
  177.     var r = nbi();
  178.     BigInteger.ZERO.subTo(this, r);
  179.     return r;
  180. }
  181. function bnAbs() {
  182.     return (this.s < 0) ? this.negate() : this;
  183. }
  184. function bnCompareTo(a) {
  185.     var r = this.s - a.s;
  186.     if (r != 0) return r;
  187.     var i = this.t;
  188.     r = i - a.t;
  189.     if (r != 0) return r;
  190.     while (--i >= 0) if ((r = this[i] - a[i]) != 0) return r;
  191.     return 0;
  192. }
  193. function nbits(x) {
  194.     var r = 1,
  195.     t;
  196.     if ((t = x >>> 16) != 0) {
  197.         x = t;
  198.         r += 16;
  199.     }
  200.     if ((t = x >> 8) != 0) {
  201.         x = t;
  202.         r += 8;
  203.     }
  204.     if ((t = x >> 4) != 0) {
  205.         x = t;
  206.         r += 4;
  207.     }
  208.     if ((t = x >> 2) != 0) {
  209.         x = t;
  210.         r += 2;
  211.     }
  212.     if ((t = x >> 1) != 0) {
  213.         x = t;
  214.         r += 1;
  215.     }
  216.     return r;
  217. }
  218. function bnBitLength() {
  219.     if (this.t <= 0) return 0;
  220.     return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));
  221. }
  222. function bnpDLShiftTo(n, r) {
  223.     var i;
  224.     for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i];
  225.     for (i = n - 1; i >= 0; --i) r[i] = 0;
  226.     r.t = this.t + n;
  227.     r.s = this.s;
  228. }
  229. function bnpDRShiftTo(n, r) {
  230.     for (var i = n; i < this.t; ++i) r[i - n] = this[i];
  231.     r.t = Math.max(this.t - n, 0);
  232.     r.s = this.s;
  233. }
  234. function bnpLShiftTo(n, r) {
  235.     var bs = n % this.DB;
  236.     var cbs = this.DB - bs;
  237.     var bm = (1 << cbs) - 1;
  238.     var ds = Math.floor(n / this.DB),
  239.     c = (this.s << bs) & this.DM,
  240.     i;
  241.     for (i = this.t - 1; i >= 0; --i) {
  242.         r[i + ds + 1] = (this[i] >> cbs) | c;
  243.         c = (this[i] & bm) << bs;
  244.     }
  245.     for (i = ds - 1; i >= 0; --i) r[i] = 0;
  246.     r[ds] = c;
  247.     r.t = this.t + ds + 1;
  248.     r.s = this.s;
  249.     r.clamp();
  250. }
  251. function bnpRShiftTo(n, r) {
  252.     r.s = this.s;
  253.     var ds = Math.floor(n / this.DB);
  254.     if (ds >= this.t) {
  255.         r.t = 0;
  256.         return;
  257.     }
  258.     var bs = n % this.DB;
  259.     var cbs = this.DB - bs;
  260.     var bm = (1 << bs) - 1;
  261.     r[0] = this[ds] >> bs;
  262.     for (var i = ds + 1; i < this.t; ++i) {
  263.         r[i - ds - 1] |= (this[i] & bm) << cbs;
  264.         r[i - ds] = this[i] >> bs;
  265.     }
  266.     if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;
  267.     r.t = this.t - ds;
  268.     r.clamp();
  269. }
  270. function bnpSubTo(a, r) {
  271.     var i = 0,
  272.     c = 0,
  273.     m = Math.min(a.t, this.t);
  274.     while (i < m) {
  275.         c += this[i] - a[i];
  276.         r[i++] = c & this.DM;
  277.         c >>= this.DB;
  278.     }
  279.     if (a.t < this.t) {
  280.         c -= a.s;
  281.         while (i < this.t) {
  282.             c += this[i];
  283.             r[i++] = c & this.DM;
  284.             c >>= this.DB;
  285.         }
  286.         c += this.s;
  287.     } else {
  288.         c += this.s;
  289.         while (i < a.t) {
  290.             c -= a[i];
  291.             r[i++] = c & this.DM;
  292.             c >>= this.DB;
  293.         }
  294.         c -= a.s;
  295.     }
  296.     r.s = (c < 0) ? -1 : 0;
  297.     if (c < -1) r[i++] = this.DV + c;
  298.     else if (c > 0) r[i++] = c;
  299.     r.t = i;
  300.     r.clamp();
  301. }
  302. function bnpMultiplyTo(a, r) {
  303.     var x = this.abs(),
  304.     y = a.abs();
  305.     var i = x.t;
  306.     r.t = i + y.t;
  307.     while (--i >= 0) r[i] = 0;
  308.     for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);
  309.     r.s = 0;
  310.     r.clamp();
  311.     if (this.s != a.s) BigInteger.ZERO.subTo(r, r);
  312. }
  313. function bnpSquareTo(r) {
  314.     var x = this.abs();
  315.     var i = r.t = 2 * x.t;
  316.     while (--i >= 0) r[i] = 0;
  317.     for (i = 0; i < x.t - 1; ++i) {
  318.         var c = x.am(i, x[i], r, 2 * i, 0, 1);
  319.         if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
  320.             r[i + x.t] -= x.DV;
  321.             r[i + x.t + 1] = 1;
  322.         }
  323.     }
  324.     if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);
  325.     r.s = 0;
  326.     r.clamp();
  327. }
  328. function bnpDivRemTo(m, q, r) {
  329.     var pm = m.abs();
  330.     if (pm.t <= 0) return;
  331.     var pt = this.abs();
  332.     if (pt.t < pm.t) {
  333.         if (q != null) q.fromInt(0);
  334.         if (r != null) this.copyTo(r);
  335.         return;
  336.     }
  337.     if (r == null) r = nbi();
  338.     var y = nbi(),
  339.     ts = this.s,
  340.     ms = m.s;
  341.     var nsh = this.DB - nbits(pm[pm.t - 1]);
  342.     if (nsh > 0) {
  343.         pm.lShiftTo(nsh, y);
  344.         pt.lShiftTo(nsh, r);
  345.     } else {
  346.         pm.copyTo(y);
  347.         pt.copyTo(r);
  348.     }
  349.     var ys = y.t;
  350.     var y0 = y[ys - 1];
  351.     if (y0 == 0) return;
  352.     var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2: 0);
  353.     var d1 = this.FV / yt,
  354.     d2 = (1 << this.F1) / yt,
  355.     e = 1 << this.F2;
  356.     var i = r.t,
  357.     j = i - ys,
  358.     t = (q == null) ? nbi() : q;
  359.     y.dlShiftTo(j, t);
  360.     if (r.compareTo(t) >= 0) {
  361.         r[r.t++] = 1;
  362.         r.subTo(t, r);
  363.     }
  364.     BigInteger.ONE.dlShiftTo(ys, t);
  365.     t.subTo(y, y);
  366.     while (y.t < ys) y[y.t++] = 0;
  367.     while (--j >= 0) {

  368.         var qd = (r[--i] == y0) ? this.DM: Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);
  369.         if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {
  370.             y.dlShiftTo(j, t);
  371.             r.subTo(t, r);
  372.             while (r[i] < --qd) r.subTo(t, r);
  373.         }
  374.     }
  375.     if (q != null) {
  376.         r.drShiftTo(ys, q);
  377.         if (ts != ms) BigInteger.ZERO.subTo(q, q);
  378.     }
  379.     r.t = ys;
  380.     r.clamp();
  381.     if (nsh > 0) r.rShiftTo(nsh, r);
  382.     if (ts < 0) BigInteger.ZERO.subTo(r, r);
  383. }
  384. function bnMod(a) {
  385.     var r = nbi();
  386.     this.abs().divRemTo(a, null, r);
  387.     if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);
  388.     return r;
  389. }
  390. function Classic(m) {
  391.     this.m = m;
  392. }
  393. function cConvert(x) {
  394.     if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);
  395.     else return x;
  396. }
  397. function cRevert(x) {
  398.     return x;
  399. }
  400. function cReduce(x) {
  401.     x.divRemTo(this.m, null, x);
  402. }
  403. function cMulTo(x, y, r) {
  404.     x.multiplyTo(y, r);
  405.     this.reduce(r);
  406. }
  407. function cSqrTo(x, r) {
  408.     x.squareTo(r);
  409.     this.reduce(r);
  410. }
  411. Classic.prototype.convert = cConvert;
  412. Classic.prototype.revert = cRevert;
  413. Classic.prototype.reduce = cReduce;
  414. Classic.prototype.mulTo = cMulTo;
  415. Classic.prototype.sqrTo = cSqrTo;
  416. function bnpInvDigit() {
  417.     if (this.t < 1) return 0;
  418.     var x = this[0];
  419.     if ((x & 1) == 0) return 0;
  420.     var y = x & 3;
  421.     y = (y * (2 - (x & 0xf) * y)) & 0xf;
  422.     y = (y * (2 - (x & 0xff) * y)) & 0xff;
  423.     y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff;

  424.     y = (y * (2 - x * y % this.DV)) % this.DV;

  425.     return (y > 0) ? this.DV - y: -y;
  426. }
  427. function Montgomery(m) {
  428.     this.m = m;
  429.     this.mp = m.invDigit();
  430.     this.mpl = this.mp & 0x7fff;
  431.     this.mph = this.mp >> 15;
  432.     this.um = (1 << (m.DB - 15)) - 1;
  433.     this.mt2 = 2 * m.t;
  434. }
  435. function montConvert(x) {
  436.     var r = nbi();
  437.     x.abs().dlShiftTo(this.m.t, r);
  438.     r.divRemTo(this.m, null, r);
  439.     if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);
  440.     return r;
  441. }
  442. function montRevert(x) {
  443.     var r = nbi();
  444.     x.copyTo(r);
  445.     this.reduce(r);
  446.     return r;
  447. }
  448. function montReduce(x) {
  449.     while (x.t <= this.mt2) x[x.t++] = 0;
  450.     for (var i = 0; i < this.m.t; ++i) {

  451.         var j = x[i] & 0x7fff;
  452.         var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;

  453.         j = i + this.m.t;
  454.         x[j] += this.m.am(0, u0, x, i, 0, this.m.t);

  455.         while (x[j] >= x.DV) {
  456.             x[j] -= x.DV;
  457.             x[++j]++;
  458.         }
  459.     }
  460.     x.clamp();
  461.     x.drShiftTo(this.m.t, x);
  462.     if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);
  463. }
  464. function montSqrTo(x, r) {
  465.     x.squareTo(r);
  466.     this.reduce(r);
  467. }
  468. function montMulTo(x, y, r) {
  469.     x.multiplyTo(y, r);
  470.     this.reduce(r);
  471. }
  472. Montgomery.prototype.convert = montConvert;
  473. Montgomery.prototype.revert = montRevert;
  474. Montgomery.prototype.reduce = montReduce;
  475. Montgomery.prototype.mulTo = montMulTo;
  476. Montgomery.prototype.sqrTo = montSqrTo;
  477. function bnpIsEven() {
  478.     return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;
  479. }
  480. function bnpExp(e, z) {
  481.     if (e > 0xffffffff || e < 1) return BigInteger.ONE;
  482.     var r = nbi(),
  483.     r2 = nbi(),
  484.     g = z.convert(this),
  485.     i = nbits(e) - 1;
  486.     g.copyTo(r);
  487.     while (--i >= 0) {
  488.         z.sqrTo(r, r2);
  489.         if ((e & (1 << i)) > 0) z.mulTo(r2, g, r);
  490.         else {
  491.             var t = r;
  492.             r = r2;
  493.             r2 = t;
  494.         }
  495.     }
  496.     return z.revert(r);
  497. }
  498. function bnModPowInt(e, m) {
  499.     var z;
  500.     if (e < 256 || m.isEven()) z = new Classic(m);
  501.     else z = new Montgomery(m);
  502.     return this.exp(e, z);
  503. }
  504. BigInteger.prototype.copyTo = bnpCopyTo;
  505. BigInteger.prototype.fromInt = bnpFromInt;
  506. BigInteger.prototype.fromString = bnpFromString;
  507. BigInteger.prototype.clamp = bnpClamp;
  508. BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
  509. BigInteger.prototype.drShiftTo = bnpDRShiftTo;
  510. BigInteger.prototype.lShiftTo = bnpLShiftTo;
  511. BigInteger.prototype.rShiftTo = bnpRShiftTo;
  512. BigInteger.prototype.subTo = bnpSubTo;
  513. BigInteger.prototype.multiplyTo = bnpMultiplyTo;
  514. BigInteger.prototype.squareTo = bnpSquareTo;
  515. BigInteger.prototype.divRemTo = bnpDivRemTo;
  516. BigInteger.prototype.invDigit = bnpInvDigit;
  517. BigInteger.prototype.isEven = bnpIsEven;
  518. BigInteger.prototype.exp = bnpExp;
  519. BigInteger.prototype.toString = bnToString;
  520. BigInteger.prototype.negate = bnNegate;
  521. BigInteger.prototype.abs = bnAbs;
  522. BigInteger.prototype.compareTo = bnCompareTo;
  523. BigInteger.prototype.bitLength = bnBitLength;
  524. BigInteger.prototype.mod = bnMod;
  525. BigInteger.prototype.modPowInt = bnModPowInt;
  526. BigInteger.ZERO = nbv(0);
  527. BigInteger.ONE = nbv(1);
  528. function Arcfour() {
  529.     this.i = 0;
  530.     this.j = 0;
  531.     this.S = new Array();
  532. }
  533. function ARC4init(key) {
  534.     var i, j, t;
  535.     for (i = 0; i < 256; ++i) this.S[i] = i;
  536.     j = 0;
  537.     for (i = 0; i < 256; ++i) {
  538.         j = (j + this.S[i] + key[i % key.length]) & 255;
  539.         t = this.S[i];
  540.         this.S[i] = this.S[j];
  541.         this.S[j] = t;
  542.     }
  543.     this.i = 0;
  544.     this.j = 0;
  545. }
  546. function ARC4next() {
  547.     var t;
  548.     this.i = (this.i + 1) & 255;
  549.     this.j = (this.j + this.S[this.i]) & 255;
  550.     t = this.S[this.i];
  551.     this.S[this.i] = this.S[this.j];
  552.     this.S[this.j] = t;
  553.     return this.S[(t + this.S[this.i]) & 255];
  554. }
  555. Arcfour.prototype.init = ARC4init;
  556. Arcfour.prototype.next = ARC4next;
  557. function prng_newstate() {
  558.     return new Arcfour();
  559. }
  560. var rng_psize = 256;
  561. var rng_state;
  562. var rng_pool;
  563. var rng_pptr;
  564. function rng_seed_int(x) {
  565.     rng_pool[rng_pptr++] ^= x & 255;
  566.     rng_pool[rng_pptr++] ^= (x >> 8) & 255;
  567.     rng_pool[rng_pptr++] ^= (x >> 16) & 255;
  568.     rng_pool[rng_pptr++] ^= (x >> 24) & 255;
  569.     if (rng_pptr >= rng_psize) rng_pptr -= rng_psize;
  570. }
  571. function rng_seed_time() {
  572.     rng_seed_int(new Date().getTime());
  573. }
  574. if (rng_pool == null) {
  575.     rng_pool = new Array();
  576.     rng_pptr = 0;
  577.     var t;
  578.     if (navigator.appName == "Netscape" && navigator.appVersion < "5" && window.crypto) {

  579.         var z = window.crypto.random(32);
  580.         for (t = 0; t < z.length; ++t) rng_pool[rng_pptr++] = z.charCodeAt(t) & 255;
  581.     }
  582.     while (rng_pptr < rng_psize) {
  583.         t = Math.floor(65536 * Math.random());
  584.         rng_pool[rng_pptr++] = t >>> 8;
  585.         rng_pool[rng_pptr++] = t & 255;
  586.     }
  587.     rng_pptr = 0;
  588.     rng_seed_time();

  589. }
  590. function rng_get_byte() {
  591.     if (rng_state == null) {
  592.         rng_seed_time();
  593.         rng_state = prng_newstate();
  594.         rng_state.init(rng_pool);
  595.         for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) rng_pool[rng_pptr] = 0;
  596.         rng_pptr = 0;

  597.     }

  598.     return rng_state.next();
  599. }
  600. function rng_get_bytes(ba) {
  601.     var i;
  602.     for (i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();
  603. }
  604. function SecureRandom() {}
  605. SecureRandom.prototype.nextBytes = rng_get_bytes;
  606. function parseBigInt(str, r) {
  607.     return new BigInteger(str, r);
  608. }
  609. function linebrk(s, n) {
  610.     var ret = "";
  611.     var i = 0;
  612.     while (i + n < s.length) {
  613.         ret += s.substring(i, i + n) + "\n";
  614.         i += n;
  615.     }
  616.     return ret + s.substring(i, s.length);
  617. }
  618. function byte2Hex(b) {
  619.     if (b < 0x10) return "0" + b.toString(16);
  620.     else return b.toString(16);
  621. }
  622. function pkcs1pad2(s, n) {
  623.     //2位长度+pin+rnd
  624.     if (n < s.length + 2) {
  625.         alert("密码太长!");
  626.         return null;
  627.     }

  628.     var ba = new Array();
  629.     var i = s.length - 1;

  630.     var len = s.length;
  631.     if (len < 100) {
  632.         ba[0] = 0x30 + len / 10;
  633.         ba[1] = 0x30 + len % 10;
  634.     } else {
  635.         alert("密码太长!");
  636.         return null;
  637.     }
  638.     var j = 2;
  639.     i = 0;
  640.     while (i < len && n > 0) {
  641.         ba[j++] = s.charCodeAt(i++);
  642.     }

  643.     var rng = new SecureRandom();
  644.     var x = new Array();
  645.     while (j < n) {
  646.         x[0] = 0;
  647.         while (x[0] == 0) rng.nextBytes(x);
  648.         ba[j++] = x[0];
  649.     }

  650.     return new BigInteger(ba);
  651. }
  652. function RSAKey() {
  653.     this.n = null;
  654.     this.e = 0;
  655.     this.d = null;
  656.     this.p = null;
  657.     this.q = null;
  658.     this.dmp1 = null;
  659.     this.dmq1 = null;
  660.     this.coeff = null;
  661. }
  662. function RSASetPublic(N, E) {
  663.     if (N != null && E != null && N.length > 0 && E.length > 0) {
  664.         this.n = parseBigInt(N, 16);
  665.         this.e = parseInt(E, 16);
  666.     } else alert("Invalid RSA public key");
  667. }
  668. function RSADoPublic(x) {
  669.     return x.modPowInt(this.e, this.n);
  670. }
  671. function RSAEncrypt(text) {
  672.     var m = pkcs1pad2(text, (this.n.bitLength() + 7) >> 3);
  673.     if (m == null) return null;
  674.     var c = this.doPublic(m);
  675.     if (c == null) return null;
  676.     var h = c.toString(16).toUpperCase();
  677.     //if((h.length & 1) == 0)
  678.     //        return h;
  679.     // else
  680.     //         return "0" + h;

  681.     var gapLen = 256 - h.length;
  682.     for (var i = 0; i < gapLen; i = i + 1) {
  683.         h = "0" + h;
  684.     }
  685.     return h;

  686. }
  687. RSAKey.prototype.doPublic = RSADoPublic;
  688. RSAKey.prototype.setPublic = RSASetPublic;
  689. RSAKey.prototype.encrypt = RSAEncrypt;
  690. var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  691. var b64pad = "=";
  692. function hex2b64(h) {
  693.     var i;
  694.     var c;
  695.     var ret = "";
  696.     for (i = 0; i + 3 <= h.length; i += 3) {
  697.         c = parseInt(h.substring(i, i + 3), 16);
  698.         ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);
  699.     }
  700.     if (i + 1 == h.length) {
  701.         c = parseInt(h.substring(i, i + 1), 16);
  702.         ret += b64map.charAt(c << 2);
  703.     } else if (i + 2 == h.length) {
  704.         c = parseInt(h.substring(i, i + 2), 16);
  705.         ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);
  706.     }
  707.     while ((ret.length & 3) > 0) ret += b64pad;
  708.     return ret;
  709. }
  710. function b64tohex(s) {
  711.     var ret = ""
  712.     var i;
  713.     var k = 0;
  714.     var slop;
  715.     for (i = 0; i < s.length; ++i) {
  716.         if (s.charAt(i) == b64pad) break;
  717.         v = b64map.indexOf(s.charAt(i));
  718.         if (v < 0) continue;
  719.         if (k == 0) {
  720.             ret += int2char(v >> 2);
  721.             slop = v & 3;
  722.             k = 1;
  723.         } else if (k == 1) {
  724.             ret += int2char((slop << 2) | (v >> 4));
  725.             slop = v & 0xf;
  726.             k = 2;
  727.         } else if (k == 2) {
  728.             ret += int2char(slop);
  729.             ret += int2char(v >> 2);
  730.             slop = v & 3;
  731.             k = 3;
  732.         } else {
  733.             ret += int2char((slop << 2) | (v >> 4));
  734.             ret += int2char(v & 0xf);
  735.             k = 0;
  736.         }
  737.     }
  738.     if (k == 1) ret += int2char(slop << 2);
  739.     return ret;
  740. }
  741. function b64toBA(s) {

  742.     var h = b64tohex(s);
  743.     var i;
  744.     var a = new Array();
  745.     for (i = 0; 2 * i < h.length; ++i) {
  746.         a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);
  747.     }
  748.     return a;
  749. }

  750. function liuhjtest(pwd) {
  751.     var PublicKey = "B1204FC8EB406948947F0F69E460BFEA19E778D7D3619AFE3EBEF3CEACA10A289F303E3EA717850757B43948FC3C6AE766B4AA8A08F927F976A0313DCB6054860DFF1CDE7DF5C87E2E3147CC9DCDDF31C97282B975088DF94679A4F1E53EFEBF68FC3717D28D00E51BED299CB1815777265B0DB4576CC314C82612277626F82D";
  752.     var RSA = new RSAKey();
  753.     RSA.setPublic(PublicKey, "10001");
  754.     var Res = RSA.encrypt(pwd);
  755.     return Res;
  756. }
复制代码


可以了 自己运行试试

评分

参与人数 1荣誉 +1 收起 理由
笨潴 + 1 热心帮助他人,荣誉+1,希望继续努力(*^__^*) 嘻嘻!

查看全部评分

回复

使用道具 举报

结帖率:67% (36/54)

签到天数: 2 天

 楼主| 发表于 2013-7-1 09:32:09 | 显示全部楼层   江苏省南通市
求调用 3Q         
回复

使用道具 举报

结帖率:100% (17/17)
发表于 2014-12-27 20:07:44 | 显示全部楼层   广东省*
应该还少了东西 无法运行 请上传网址 或者提供完整js地址
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表