|
沙发

楼主 |
发表于 2014-8-8 17:46:38
|
只看该作者
- !(function (a) {
- function b(a) {
- var b = e, c = b.biDivideByRadixPower(a, this.k - 1);
- for(c = b.biMultiply(c, this.mu) , c = b.biDivideByRadixPower(c, this.k + 1) , a = b.biModuloByRadixPower(a, this.k + 1) , c = b.biMultiply(c, this.modulus) , c = b.biModuloByRadixPower(c, this.k + 1) , a = b.biSubtract(a, c) , a.isNeg && (a = b.biAdd(a, this.bkplus1)) , c = b.biCompare(a, this.modulus) >= 0; c; ) {
- a = b.biSubtract(a, this.modulus) , c = b.biCompare(a, this.modulus) >= 0;
- }
- return a;
- }
- function c(a, b) {
- return this.modulo(e.biMultiply(a, b));
- }
- function d(a, b) {
- var c = new l();
- c.digits[0] = 1;
- for(var d = a, f = b; 0 != (1 & f.digits[0]) && (c = this.multiplyMod(c, d)) , f = e.biShiftRight(f, 1) , 0 != f.digits[0] || 0 != e.biHighIndex(f); ) {
- d = this.multiplyMod(d, d);
- }
- return c;
- }
- if("undefined" == typeof a.RSAUtils) {
- var e = a.RSAUtils = {
- };
- }
- var f, g, h, k, l = a.BigInt = function (a) {
- this.digits = "boolean" == typeof a && 1 == a ? null : g.slice(0) , this.isNeg = !1;
- };
- e.setMaxDigits = function (a) {
- for(f = a , g = Array(f) , a = 0; a < g.length; a++) {
- g[a] = 0;
- }
- h = new l() , k = new l() , k.digits[0] = 1;
- } , e.setMaxDigits(20) , e.biFromNumber = function (a) {
- var b = new l();
- b.isNeg = 0 > a , a = Math.abs(a);
- for(var c = 0; a > 0; ) {
- b.digits[c++] = 65535 & a , a = Math.floor(a / 65536);
- }
- return b;
- };
- var m = e.biFromNumber(1e15);
- e.biFromDecimal = function (a) {
- for(var d, b = "-" == a.charAt(0), c = b ? 1 : 0; c < a.length && "0" == a.charAt(c); ) {
- ++c;
- }
- if(c == a.length) {
- d = new l();
- } else {
- var f = (a.length - c) % 15;
- for(0 == f && (f = 15) , d = e.biFromNumber(Number(a.substr(c, f))) , c += f; c < a.length; ) {
- d = e.biAdd(e.biMultiply(d, m), e.biFromNumber(Number(a.substr(c, 15)))) , c += 15;
- }
- d.isNeg = b;
- }
- return d;
- } , e.biCopy = function (a) {
- var b = new l(!0);
- return b.digits = a.digits.slice(0) , b.isNeg = a.isNeg , b;
- } , e.reverseStr = function (a) {
- for(var b = "", c = a.length - 1; c > -1; --c) {
- b += a.charAt(c);
- }
- return b;
- };
- var n = [
- "0",
- "1",
- "2",
- "3",
- "4",
- "5",
- "6",
- "7",
- "8",
- "9",
- "a",
- "b",
- "c",
- "d",
- "e",
- "f",
- "g",
- "h",
- "i",
- "j",
- "k",
- "l",
- "m",
- "n",
- "o",
- "p",
- "q",
- "r",
- "s",
- "t",
- "u",
- "v",
- "w",
- "x",
- "y",
- "z"
- ];
- e.biToString = function (a, b) {
- var c = new l();
- c.digits[0] = b;
- for(var d = e.biDivideModulo(a, c), f = n[d[1].digits[0]]; 1 == e.biCompare(d[0], h); ) {
- d = e.biDivideModulo(d[0], c) , digit = d[1].digits[0] , f += n[d[1].digits[0]];
- }
- return (a.isNeg ? "-" : "") + e.reverseStr(f);
- } , e.biToDecimal = function (a) {
- var b = new l();
- b.digits[0] = 10;
- for(var c = e.biDivideModulo(a, b), d = String(c[1].digits[0]); 1 == e.biCompare(c[0], h); ) {
- c = e.biDivideModulo(c[0], b) , d += String(c[1].digits[0]);
- }
- return (a.isNeg ? "-" : "") + e.reverseStr(d);
- };
- var o = [
- "0",
- "1",
- "2",
- "3",
- "4",
- "5",
- "6",
- "7",
- "8",
- "9",
- "a",
- "b",
- "c",
- "d",
- "e",
- "f"
- ];
- e.digitToHex = function (a) {
- var b = "";
- for(i = 0; 4 > i; ++i) {
- b += o[15 & a] , a >>>= 4;
- }
- return e.reverseStr(b);
- } , e.biToHex = function (a) {
- var b = "";
- e.biHighIndex(a);
- for(var c = e.biHighIndex(a); c > -1; --c) {
- b += e.digitToHex(a.digits[c]);
- }
- return b;
- } , e.charToHex = function (a) {
- return a >= 48 && 57 >= a ? a - 48 : a >= 65 && 90 >= a ? 10 + a - 65 : a >= 97 && 122 >= a ? 10 + a - 97 : 0;
- } , e.hexToDigit = function (a) {
- for(var b = 0, c = Math.min(a.length, 4), d = 0; c > d; ++d) {
- b <<= 4 , b |= e.charToHex(a.charCodeAt(d));
- }
- return b;
- } , e.biFromHex = function (a) {
- for(var b = new l(), c = a.length, d = 0; c > 0; c -= 4 , ++d) {
- b.digits[d] = e.hexToDigit(a.substr(Math.max(c - 4, 0), Math.min(c, 4)));
- }
- return b;
- } , e.biFromString = function (a, b) {
- var c = "-" == a.charAt(0), d = c ? 1 : 0, f = new l(), g = new l();
- g.digits[0] = 1;
- for(var h = a.length - 1; h >= d; h--) {
- var i = a.charCodeAt(h);
- i = e.charToHex(i) , i = e.biMultiplyDigit(g, i) , f = e.biAdd(f, i) , g = e.biMultiplyDigit(g, b);
- }
- return f.isNeg = c , f;
- } , e.biDump = function (a) {
- return (a.isNeg ? "-" : "") + a.digits.join(" ");
- } , e.biAdd = function (a, b) {
- var c;
- if(a.isNeg != b.isNeg) {
- b.isNeg = !b.isNeg , c = e.biSubtract(a, b) , b.isNeg = !b.isNeg;
- } else {
- c = new l();
- for(var d = 0, f = 0; f < a.digits.length; ++f) {
- d = a.digits[f] + b.digits[f] + d , c.digits[f] = d % 65536 , d = Number(d >= 65536);
- }
- c.isNeg = a.isNeg;
- }
- return c;
- } , e.biSubtract = function (a, b) {
- var c;
- if(a.isNeg != b.isNeg) {
- b.isNeg = !b.isNeg , c = e.biAdd(a, b) , b.isNeg = !b.isNeg;
- } else {
- c = new l();
- for(var d, f = d = 0; f < a.digits.length; ++f) {
- d = a.digits[f] - b.digits[f] + d , c.digits[f] = d % 65536 , c.digits[f] < 0 && (c.digits[f] += 65536) , d = 0 - Number(0 > d);
- }
- if(-1 == d) {
- for(f = d = 0; f < a.digits.length; ++f) {
- d = 0 - c.digits[f] + d , c.digits[f] = d % 65536 , c.digits[f] < 0 && (c.digits[f] += 65536) , d = 0 - Number(0 > d);
- }
- c.isNeg = !a.isNeg;
- } else {
- c.isNeg = a.isNeg;
- }
- }
- return c;
- } , e.biHighIndex = function (a) {
- for(var b = a.digits.length - 1; b > 0 && 0 == a.digits[b]; ) {
- --b;
- }
- return b;
- } , e.biNumBits = function (a) {
- var b = e.biHighIndex(a);
- a = a.digits[b] , b = 16 * (b + 1);
- var c;
- for(c = b; c > b - 16 && 0 == (32768 & a); --c) {
- a <<= 1;
- }
- return c;
- } , e.biMultiply = function (a, b) {
- for(var d, h, c = new l(), f = e.biHighIndex(a), g = e.biHighIndex(b), i = 0; g >= i; ++i) {
- for(d = 0 , h = i , j = 0; f >= j; ++j , ++h) {
- d = c.digits[h] + a.digits[j] * b.digits[i] + d , c.digits[h] = 65535 & d , d >>>= 16;
- }
- c.digits[i + f + 1] = d;
- }
- return c.isNeg = a.isNeg != b.isNeg , c;
- } , e.biMultiplyDigit = function (a, b) {
- var c, d;
- result = new l() , c = e.biHighIndex(a);
- for(var f = d = 0; c >= f; ++f) {
- d = result.digits[f] + a.digits[f] * b + d , result.digits[f] = 65535 & d , d >>>= 16;
- }
- return result.digits[1 + c] = d , result;
- } , e.arrayCopy = function (a, b, c, d, e) {
- for(e = Math.min(b + e, a.length) , b = b , d = d; e > b; ++b , ++d) {
- c[d] = a[b];
- }
- };
- var p = [
- 0,
- 32768,
- 49152,
- 57344,
- 61440,
- 63488,
- 64512,
- 65024,
- 65280,
- 65408,
- 65472,
- 65504,
- 65520,
- 65528,
- 65532,
- 65534,
- 65535
- ];
- e.biShiftLeft = function (a, b) {
- var c = Math.floor(b / 16), d = new l();
- e.arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c) , c = b % 16;
- for(var f = 16 - c, g = d.digits.length - 1, h = g - 1; g > 0; --g , --h) {
- d.digits[g] = 65535 & d.digits[g] << c | (d.digits[h] & p[c]) >>> f;
- }
- return d.digits[0] = 65535 & d.digits[g] << c , d.isNeg = a.isNeg , d;
- };
- var q = [
- 0,
- 1,
- 3,
- 7,
- 15,
- 31,
- 63,
- 127,
- 255,
- 511,
- 1023,
- 2047,
- 4095,
- 8191,
- 16383,
- 32767,
- 65535
- ];
- e.biShiftRight = function (a, b) {
- var c = Math.floor(b / 16), d = new l();
- e.arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c) , c = b % 16;
- for(var f = 16 - c, g = 0, h = g + 1; g < d.digits.length - 1; ++g , ++h) {
- d.digits[g] = d.digits[g] >>> c | (d.digits[h] & q[c]) << f;
- }
- return d.digits[d.digits.length - 1] >>>= c , d.isNeg = a.isNeg , d;
- } , e.biMultiplyByRadixPower = function (a, b) {
- var c = new l();
- return e.arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b) , c;
- } , e.biDivideByRadixPower = function (a, b) {
- var c = new l();
- return e.arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b) , c;
- } , e.biModuloByRadixPower = function (a, b) {
- var c = new l();
- return e.arrayCopy(a.digits, 0, c.digits, 0, b) , c;
- } , e.biCompare = function (a, b) {
- if(a.isNeg != b.isNeg) {
- return 1 - 2 * Number(a.isNeg);
- }
- for(var c = a.digits.length - 1; c >= 0; --c) {
- if(a.digits[c] != b.digits[c]) {
- return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]);
- }
- }
- return 0;
- } , e.biDivideModulo = function (a, b) {
- var g, h, c = e.biNumBits(a), d = e.biNumBits(b), f = b.isNeg;
- if(d > c) {
- return a.isNeg ? (g = e.biCopy(k) , g.isNeg = !b.isNeg , a.isNeg = !1 , b.isNeg = !1 , h = biSubtract(b, a) , a.isNeg = !0 , b.isNeg = f) : (g = new l() , h = e.biCopy(a)) , [
- g,
- h
- ];
- }
- g = new l() , h = a;
- for(var i = Math.ceil(d / 16) - 1, j = 0; b.digits[i] < 32768; ) {
- b = e.biShiftLeft(b, 1) , ++j , ++d , i = Math.ceil(d / 16) - 1;
- }
- for(h = e.biShiftLeft(h, j) , c += j , c = Math.ceil(c / 16) - 1 , d = e.biMultiplyByRadixPower(b, c - i); -1 != e.biCompare(h, d); ) {
- ++g.digits[c - i] , h = e.biSubtract(h, d);
- }
- for(c = c; c > i; --c) {
- d = c >= h.digits.length ? 0 : h.digits[c];
- var m = c - 1 >= h.digits.length ? 0 : h.digits[c - 1], n = c - 2 >= h.digits.length ? 0 : h.digits[c - 2], o = i >= b.digits.length ? 0 : b.digits[i], p = i - 1 >= b.digits.length ? 0 : b.digits[i - 1];
- g.digits[c - i - 1] = d == o ? 65535 : Math.floor((65536 * d + m) / o);
- for(var q = g.digits[c - i - 1] * (65536 * o + p), r = 4294967296 * d + (65536 * m + n); q > r; ) {
- --g.digits[c - i - 1] , q = g.digits[c - i - 1] * (65536 * o | p) , r = 65536 * 65536 * d + (65536 * m + n);
- }
- d = e.biMultiplyByRadixPower(b, c - i - 1) , h = e.biSubtract(h, e.biMultiplyDigit(d, g.digits[c - i - 1])) , h.isNeg && (h = e.biAdd(h, d) , --g.digits[c - i - 1]);
- }
- return h = e.biShiftRight(h, j) , g.isNeg = a.isNeg != f , a.isNeg && (g = f ? e.biAdd(g, k) : e.biSubtract(g, k) , b = e.biShiftRight(b, j) , h = e.biSubtract(b, h)) , 0 == h.digits[0] && 0 == e.biHighIndex(h) && (h.isNeg = !1) , [
- g,
- h
- ];
- } , e.biDivide = function (a, b) {
- return e.biDivideModulo(a, b)[0];
- } , e.biModulo = function (a, b) {
- return e.biDivideModulo(a, b)[1];
- } , e.biMultiplyMod = function (a, b, c) {
- return e.biModulo(e.biMultiply(a, b), c);
- } , e.biPow = function (a, b) {
- for(var c = k, d = a; 0 != (1 & b) && (c = e.biMultiply(c, d)) , b >>= 1 , 0 != b; ) {
- d = e.biMultiply(d, d);
- }
- return c;
- } , e.biPowMod = function (a, b, c) {
- var d = k;
- for(a = a , b = b; 0 != (1 & b.digits[0]) && (d = e.biMultiplyMod(d, a, c)) , b = e.biShiftRight(b, 1) , 0 != b.digits[0] || 0 != e.biHighIndex(b); ) {
- a = e.biMultiplyMod(a, a, c);
- }
- return d;
- } , a.BarrettMu = function (a) {
- this.modulus = e.biCopy(a) , this.k = e.biHighIndex(this.modulus) + 1 , a = new l() , a.digits[2 * this.k] = 1 , this.mu = e.biDivide(a, this.modulus) , this.bkplus1 = new l() , this.bkplus1.digits[this.k + 1] = 1 , this.modulo = b , this.multiplyMod = c , this.powMod = d;
- };
- var r = function (b, c, d) {
- var f = e;
- this.e = f.biFromHex(b) , this.d = f.biFromHex(c) , this.m = f.biFromHex(d) , this.chunkSize = 2 * f.biHighIndex(this.m) , this.radix = 16 , this.barrett = new a.BarrettMu(this.m);
- };
- e.getKeyPair = function (a, b, c) {
- return new r(a, b, c);
- } , "undefined" == typeof a.twoDigit && (a.twoDigit = function (a) {
- return (10 > a ? "0" : "") + String(a);
- }) , e.encryptedString = function (a, b) {
- for(var c = [], d = b.length, f = 0; d > f; ) {
- c[f] = b.charCodeAt(f) , f++;
- }
- for(; 0 != c.length % a.chunkSize; ) {
- c[f++] = 0;
- }
- d = c.length;
- var h, i, j, g = "";
- for(f = 0; d > f; f += a.chunkSize) {
- for(j = new l() , h = 0 , i = f; i < f + a.chunkSize; ++h) {
- j.digits[h] = c[i++] , j.digits[h] += c[i++] << 8;
- }
- h = a.barrett.powMod(j, a.e) , h = 16 == a.radix ? e.biToHex(h) : e.biToString(h, a.radix) , g += h + " ";
- }
- return g.substring(0, g.length - 1);
- } , e.decryptedString = function (a, b) {
- var f, g, h, c = b.split(" "), d = "";
- for(f = 0; f < c.length; ++f) {
- for(g = 16 == a.radix ? e.biFromHex(c[f]) : e.biFromString(c[f], a.radix) , h = a.barrett.powMod(g, a.d) , g = 0; g <= e.biHighIndex(h); ++g) {
- d += String.fromCharCode(255 & h.digits[g], h.digits[g] >> 8);
- }
- }
- return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)) , d;
- } , e.setMaxDigits(130);
- })(window);
- function pwd(exponent, modulus,password){
- var key = RSAUtils.getKeyPair(exponent, "", modulus);
- var encryptPassword = RSAUtils.encryptedString(key, password);
- return encryptPassword;
- };
复制代码 |
|