├── 01-中关村(md5).js ├── 02-逗游(SHA1).js ├── 03-博客园(JSEncrypt).js ├── 04-37游戏(self).js ├── 05-188游戏中心(JSEncrypt).js ├── 06-立德金融(RSA.js ├── 07-民投金服(RSA).js ├── 08-同花顺(RSA).js ├── 09-金融界(md5).js ├── 10-4366(JSEncrypt).js ├── 11-哔哩哔哩(JSEncrypt动态传参).js ├── 12-中国移动(JSEncrypt).js ├── 13-shop99(md5).js ├── 14-连载阅读(base64).js ├── 15-国美Wap端(AES).js ├── 16-京东(JSEncrypt).js ├── 17-58同城(RSA).js ├── 18-拉钩(多重md5).js ├── 19-起点(RSA网页存储公钥和模).js ├── 20-嘀嘀打车(md5).js ├── 21-虾米 唯品会 汽车之家 爱卡汽车 酷狗 搜狐 微信公众号 楚楚街(md5).js ├── 22-网易博客(RSA).js ├── 23-新浪二手房(RSA密码固定不变).js ├── 24-手机百度(RSA各种函数寻找).js ├── 25-5173(MD5难).js ├── 26-懒人听书(CryptoJS ).js ├── README.md ├── RSA.js ├── SHA1.js ├── base64.js ├── md5.js └── 鬼鬼JS调试工具7.0 ├── test.html ├── v8.dll ├── v8js.ec └── 鬼鬼JS调试工具7.0.exe /01-中关村(md5).js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.0.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2012 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | var CryptoJS = CryptoJS || function(o, q) { 8 | var l = {} 9 | , m = l.lib = {} 10 | , n = m.Base = function() { 11 | function a() {} 12 | return { 13 | extend: function(e) { 14 | a.prototype = this; 15 | var c = new a; 16 | e && c.mixIn(e); 17 | c.$super = this; 18 | return c 19 | }, 20 | create: function() { 21 | var a = this.extend(); 22 | a.init.apply(a, arguments); 23 | return a 24 | }, 25 | init: function() {}, 26 | mixIn: function(a) { 27 | for (var c in a) 28 | a.hasOwnProperty(c) && (this[c] = a[c]); 29 | a.hasOwnProperty("toString") && (this.toString = a.toString) 30 | }, 31 | clone: function() { 32 | return this.$super.extend(this) 33 | } 34 | } 35 | }() 36 | , j = m.WordArray = n.extend({ 37 | init: function(a, e) { 38 | a = this.words = a || []; 39 | this.sigBytes = e != q ? e : 4 * a.length 40 | }, 41 | toString: function(a) { 42 | return (a || r).stringify(this) 43 | }, 44 | concat: function(a) { 45 | var e = this.words 46 | , c = a.words 47 | , d = this.sigBytes 48 | , a = a.sigBytes; 49 | this.clamp(); 50 | if (d % 4) 51 | for (var b = 0; b < a; b++) 52 | e[d + b >>> 2] |= (c[b >>> 2] >>> 24 - 8 * (b % 4) & 255) << 24 - 8 * ((d + b) % 4); 53 | else if (65535 < c.length) 54 | for (b = 0; b < a; b += 4) 55 | e[d + b >>> 2] = c[b >>> 2]; 56 | else 57 | e.push.apply(e, c); 58 | this.sigBytes += a; 59 | return this 60 | }, 61 | clamp: function() { 62 | var a = this.words 63 | , e = this.sigBytes; 64 | a[e >>> 2] &= 4294967295 << 32 - 8 * (e % 4); 65 | a.length = o.ceil(e / 4) 66 | }, 67 | clone: function() { 68 | var a = n.clone.call(this); 69 | a.words = this.words.slice(0); 70 | return a 71 | }, 72 | random: function(a) { 73 | for (var e = [], c = 0; c < a; c += 4) 74 | e.push(4294967296 * o.random() | 0); 75 | return j.create(e, a) 76 | } 77 | }) 78 | , k = l.enc = {} 79 | , r = k.Hex = { 80 | stringify: function(a) { 81 | for (var e = a.words, a = a.sigBytes, c = [], d = 0; d < a; d++) { 82 | var b = e[d >>> 2] >>> 24 - 8 * (d % 4) & 255; 83 | c.push((b >>> 4).toString(16)); 84 | c.push((b & 15).toString(16)) 85 | } 86 | return c.join("") 87 | }, 88 | parse: function(a) { 89 | for (var b = a.length, c = [], d = 0; d < b; d += 2) 90 | c[d >>> 3] |= parseInt(a.substr(d, 2), 16) << 24 - 4 * (d % 8); 91 | return j.create(c, b / 2) 92 | } 93 | } 94 | , p = k.Latin1 = { 95 | stringify: function(a) { 96 | for (var b = a.words, a = a.sigBytes, c = [], d = 0; d < a; d++) 97 | c.push(String.fromCharCode(b[d >>> 2] >>> 24 - 8 * (d % 4) & 255)); 98 | return c.join("") 99 | }, 100 | parse: function(a) { 101 | for (var b = a.length, c = [], d = 0; d < b; d++) 102 | c[d >>> 2] |= (a.charCodeAt(d) & 255) << 24 - 8 * (d % 4); 103 | return j.create(c, b) 104 | } 105 | } 106 | , h = k.Utf8 = { 107 | stringify: function(a) { 108 | try { 109 | return decodeURIComponent(escape(p.stringify(a))) 110 | } catch (b) { 111 | throw Error("Malformed UTF-8 data"); 112 | } 113 | }, 114 | parse: function(a) { 115 | return p.parse(unescape(encodeURIComponent(a))) 116 | } 117 | } 118 | , b = m.BufferedBlockAlgorithm = n.extend({ 119 | reset: function() { 120 | this._data = j.create(); 121 | this._nDataBytes = 0 122 | }, 123 | _append: function(a) { 124 | "string" == typeof a && (a = h.parse(a)); 125 | this._data.concat(a); 126 | this._nDataBytes += a.sigBytes 127 | }, 128 | _process: function(a) { 129 | var b = this._data 130 | , c = b.words 131 | , d = b.sigBytes 132 | , f = this.blockSize 133 | , i = d / (4 * f) 134 | , i = a ? o.ceil(i) : o.max((i | 0) - this._minBufferSize, 0) 135 | , a = i * f 136 | , d = o.min(4 * a, d); 137 | if (a) { 138 | for (var h = 0; h < a; h += f) 139 | this._doProcessBlock(c, h); 140 | h = c.splice(0, a); 141 | b.sigBytes -= d 142 | } 143 | return j.create(h, d) 144 | }, 145 | clone: function() { 146 | var a = n.clone.call(this); 147 | a._data = this._data.clone(); 148 | return a 149 | }, 150 | _minBufferSize: 0 151 | }); 152 | m.Hasher = b.extend({ 153 | init: function() { 154 | this.reset() 155 | }, 156 | reset: function() { 157 | b.reset.call(this); 158 | this._doReset() 159 | }, 160 | update: function(a) { 161 | this._append(a); 162 | this._process(); 163 | return this 164 | }, 165 | finalize: function(a) { 166 | a && this._append(a); 167 | this._doFinalize(); 168 | return this._hash 169 | }, 170 | clone: function() { 171 | var a = b.clone.call(this); 172 | a._hash = this._hash.clone(); 173 | return a 174 | }, 175 | blockSize: 16, 176 | _createHelper: function(a) { 177 | return function(b, c) { 178 | return a.create(c).finalize(b) 179 | } 180 | }, 181 | _createHmacHelper: function(a) { 182 | return function(b, c) { 183 | return f.HMAC.create(a, c).finalize(b) 184 | } 185 | } 186 | }); 187 | var f = l.algo = {}; 188 | return l 189 | }(Math); 190 | (function(o) { 191 | function q(b, f, a, e, c, d, g) { 192 | b = b + (f & a | ~f & e) + c + g; 193 | return (b << d | b >>> 32 - d) + f 194 | } 195 | function l(b, f, a, e, c, d, g) { 196 | b = b + (f & e | a & ~e) + c + g; 197 | return (b << d | b >>> 32 - d) + f 198 | } 199 | function m(b, f, a, e, c, d, g) { 200 | b = b + (f ^ a ^ e) + c + g; 201 | return (b << d | b >>> 32 - d) + f 202 | } 203 | function n(b, f, a, e, c, d, g) { 204 | b = b + (a ^ (f | ~e)) + c + g; 205 | return (b << d | b >>> 32 - d) + f 206 | } 207 | var j = CryptoJS 208 | , k = j.lib 209 | , r = k.WordArray 210 | , k = k.Hasher 211 | , p = j.algo 212 | , h = []; 213 | (function() { 214 | for (var b = 0; 64 > b; b++) 215 | h[b] = 4294967296 * o.abs(o.sin(b + 1)) | 0 216 | } 217 | )(); 218 | p = p.MD5 = k.extend({ 219 | _doReset: function() { 220 | this._hash = r.create([1732584193, 4023233417, 2562383102, 271733878]) 221 | }, 222 | _doProcessBlock: function(b, f) { 223 | for (var a = 0; 16 > a; a++) { 224 | var e = f + a 225 | , c = b[e]; 226 | b[e] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360 227 | } 228 | for (var e = this._hash.words, c = e[0], d = e[1], g = e[2], i = e[3], a = 0; 64 > a; a += 4) 229 | 16 > a ? (c = q(c, d, g, i, b[f + a], 7, h[a]), 230 | i = q(i, c, d, g, b[f + a + 1], 12, h[a + 1]), 231 | g = q(g, i, c, d, b[f + a + 2], 17, h[a + 2]), 232 | d = q(d, g, i, c, b[f + a + 3], 22, h[a + 3])) : 32 > a ? (c = l(c, d, g, i, b[f + (a + 1) % 16], 5, h[a]), 233 | i = l(i, c, d, g, b[f + (a + 6) % 16], 9, h[a + 1]), 234 | g = l(g, i, c, d, b[f + (a + 11) % 16], 14, h[a + 2]), 235 | d = l(d, g, i, c, b[f + a % 16], 20, h[a + 3])) : 48 > a ? (c = m(c, d, g, i, b[f + (3 * a + 5) % 16], 4, h[a]), 236 | i = m(i, c, d, g, b[f + (3 * a + 8) % 16], 11, h[a + 1]), 237 | g = m(g, i, c, d, b[f + (3 * a + 11) % 16], 16, h[a + 2]), 238 | d = m(d, g, i, c, b[f + (3 * a + 14) % 16], 23, h[a + 3])) : (c = n(c, d, g, i, b[f + 3 * a % 16], 6, h[a]), 239 | i = n(i, c, d, g, b[f + (3 * a + 7) % 16], 10, h[a + 1]), 240 | g = n(g, i, c, d, b[f + (3 * a + 14) % 16], 15, h[a + 2]), 241 | d = n(d, g, i, c, b[f + (3 * a + 5) % 16], 21, h[a + 3])); 242 | e[0] = e[0] + c | 0; 243 | e[1] = e[1] + d | 0; 244 | e[2] = e[2] + g | 0; 245 | e[3] = e[3] + i | 0 246 | }, 247 | _doFinalize: function() { 248 | var b = this._data 249 | , f = b.words 250 | , a = 8 * this._nDataBytes 251 | , e = 8 * b.sigBytes; 252 | f[e >>> 5] |= 128 << 24 - e % 32; 253 | f[(e + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360; 254 | b.sigBytes = 4 * (f.length + 1); 255 | this._process(); 256 | b = this._hash.words; 257 | for (f = 0; 4 > f; f++) 258 | a = b[f], 259 | b[f] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360 260 | } 261 | }); 262 | j.MD5 = k._createHelper(p); 263 | j.HmacMD5 = k._createHmacHelper(p) 264 | } 265 | )(Math); 266 | 267 | function getPwd(pwd){ 268 | return CryptoJS.MD5(pwd+"zol") + ''; 269 | } -------------------------------------------------------------------------------- /02-逗游(SHA1).js: -------------------------------------------------------------------------------- 1 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 2 | /* SHA-1 implementation in JavaScript | (c) Chris Veness 2002-2010 | www.movable-type.co.uk */ 3 | /* - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html */ 4 | /* http://csrc.nist.gov/groups/ST/toolkit/examples.html */ 5 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 6 | 7 | var Sha1 = {}; // Sha1 namespace 8 | 9 | /** 10 | * Generates SHA-1 hash of string 11 | * 12 | * @param {String} msg String to be hashed 13 | * @param {Boolean} [utf8encode=true] Encode msg as UTF-8 before generating hash 14 | * @returns {String} Hash of msg as hex character string 15 | */ 16 | Sha1.hash = function(msg, utf8encode) { 17 | utf8encode = (typeof utf8encode == 'undefined') ? true : utf8encode; 18 | 19 | // convert string to UTF-8, as SHA only deals with byte-streams 20 | if (utf8encode) msg = Utf8.encode(msg); 21 | 22 | // constants [§4.2.1] 23 | var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; 24 | 25 | // PREPROCESSING 26 | 27 | msg += String.fromCharCode(0x80); // add trailing '1' bit (+ 0's padding) to string [§5.1.1] 28 | 29 | // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1] 30 | var l = msg.length/4 + 2; // length (in 32-bit integers) of msg + ‘1’ + appended length 31 | var N = Math.ceil(l/16); // number of 16-integer-blocks required to hold 'l' ints 32 | var M = new Array(N); 33 | 34 | for (var i=0; i>> 32, but since JS converts 43 | // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators 44 | M[N-1][14] = ((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14]) 45 | M[N-1][15] = ((msg.length-1)*8) & 0xffffffff; 46 | 47 | // set initial hash value [§5.3.1] 48 | var H0 = 0x67452301; 49 | var H1 = 0xefcdab89; 50 | var H2 = 0x98badcfe; 51 | var H3 = 0x10325476; 52 | var H4 = 0xc3d2e1f0; 53 | 54 | // HASH COMPUTATION [§6.1.2] 55 | 56 | var W = new Array(80); var a, b, c, d, e; 57 | for (var i=0; i>>(32-n)); 106 | } 107 | 108 | // 109 | // hexadecimal representation of a number 110 | // (note toString(16) is implementation-dependant, and 111 | // in IE returns signed numbers when used on full words) 112 | // 113 | Sha1.toHexStr = function(n) { 114 | var s="", v; 115 | for (var i=7; i>=0; i--) { v = (n>>>(i*4)) & 0xf; s += v.toString(16); } 116 | return s; 117 | } 118 | 119 | 120 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 121 | /* Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple */ 122 | /* single-byte character encoding (c) Chris Veness 2002-2010 */ 123 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 124 | 125 | var Utf8 = {}; // Utf8 namespace 126 | 127 | /** 128 | * Encode multi-byte Unicode string into utf-8 multiple single-byte characters 129 | * (BMP / basic multilingual plane only) 130 | * 131 | * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars 132 | * 133 | * @param {String} strUni Unicode string to be encoded as UTF-8 134 | * @returns {String} encoded string 135 | */ 136 | Utf8.encode = function(strUni) { 137 | // use regular expressions & String.replace callback function for better efficiency 138 | // than procedural approaches 139 | var strUtf = strUni.replace( 140 | /[\u0080-\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz 141 | function(c) { 142 | var cc = c.charCodeAt(0); 143 | return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); } 144 | ); 145 | strUtf = strUtf.replace( 146 | /[\u0800-\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz 147 | function(c) { 148 | var cc = c.charCodeAt(0); 149 | return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); } 150 | ); 151 | return strUtf; 152 | } 153 | 154 | /** 155 | * Decode utf-8 encoded string back into multi-byte Unicode characters 156 | * 157 | * @param {String} strUtf UTF-8 string to be decoded back to Unicode 158 | * @returns {String} decoded string 159 | */ 160 | Utf8.decode = function(strUtf) { 161 | // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char! 162 | var strUni = strUtf.replace( 163 | /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars 164 | function(c) { // (note parentheses for precence) 165 | var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f); 166 | return String.fromCharCode(cc); } 167 | ); 168 | strUni = strUni.replace( 169 | /[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars 170 | function(c) { // (note parentheses for precence) 171 | var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f; 172 | return String.fromCharCode(cc); } 173 | ); 174 | return strUni; 175 | } 176 | 177 | 178 | function getPassword(pwd){ 179 | //nonce和ts都是通过ajax的请求包获取等到的,然后下面经过了两层加密 180 | var nonce = "Dqz3ly4Fei"; 181 | var ts = 1525865605; 182 | pwd = Sha1.hash(pwd); 183 | pwd = Sha1.hash(nonce+ts+pwd); 184 | return pwd; 185 | } -------------------------------------------------------------------------------- /04-37游戏(self).js: -------------------------------------------------------------------------------- 1 | var ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 2 | function __rsa(str) { 3 | var out, i, len; 4 | var c1, c2, c3; 5 | len = str.length; 6 | i = 0; 7 | out = ""; 8 | while (i < len) { 9 | c1 = str.charCodeAt(i++) & 0xff; 10 | if (i == len) { 11 | out += ch.charAt(c1 >> 2); 12 | out += ch.charAt((c1 & 0x3) << 4); 13 | out += "=="; 14 | break 15 | } 16 | c2 = str.charCodeAt(i++); 17 | if (i == len) { 18 | out += ch.charAt(c1 >> 2); 19 | out += ch.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); 20 | out += ch.charAt((c2 & 0xF) << 2); 21 | out += "="; 22 | break 23 | } 24 | c3 = str.charCodeAt(i++); 25 | out += ch.charAt(c1 >> 2); 26 | out += ch.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)); 27 | out += ch.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)); 28 | out += ch.charAt(c3 & 0x3F) 29 | } 30 | return out 31 | } 32 | function td(a) { 33 | var maxPos = ch.length - 2 34 | , w = []; 35 | for (i = 0; i < 15; i++) { 36 | w.push(ch.charAt(Math.floor(Math.random() * maxPos))); 37 | if (i === 7) { 38 | w.push(a.substr(0, 3)) 39 | } 40 | if (i === 12) { 41 | w.push(a.substr(3)) 42 | } 43 | } 44 | return __rsa(w.join("")) 45 | } 46 | function getPwd(pwd){ 47 | return td(pwd); 48 | } -------------------------------------------------------------------------------- /06-立德金融(RSA.js: -------------------------------------------------------------------------------- 1 | var window = this; 2 | !function(a) { 3 | function b(a, b, c) { 4 | this.e = s(a), 5 | this.d = s(b), 6 | this.m = s(c), 7 | this.chunkSize = 128, 8 | this.radix = 16, 9 | this.barrett = new d(this.m) 10 | } 11 | function c(a, b) { 12 | for (var c = new Array, d = b.length, e = 0; d > e; ) 13 | c[e] = b.charCodeAt(e), 14 | e++; 15 | for (; c.length % a.chunkSize != 0; ) 16 | c[e++] = 0; 17 | var f, g, h, j = c.length, k = ""; 18 | for (e = 0; j > e; e += a.chunkSize) { 19 | for (h = new i, 20 | f = 0, 21 | g = e; g < e + a.chunkSize; ++f) 22 | h.digits[f] = c[g++], 23 | h.digits[f] += c[g++] << 8; 24 | var l = a.barrett.powMod(h, a.e) 25 | , m = 16 == a.radix ? p(l) : n(l, a.radix); 26 | k += m + " " 27 | } 28 | return k.substring(0, k.length - 1) 29 | } 30 | function d(a) { 31 | this.modulus = k(a), 32 | this.k = v(this.modulus) + 1; 33 | var b = new i; 34 | b.digits[2 * this.k] = 1, 35 | this.mu = H(b, this.modulus), 36 | this.bkplus1 = new i, 37 | this.bkplus1.digits[this.k + 1] = 1, 38 | this.modulo = e, 39 | this.multiplyMod = f, 40 | this.powMod = g 41 | } 42 | function e(a) { 43 | var b = D(a, this.k - 1) 44 | , c = x(b, this.mu) 45 | , d = D(c, this.k + 1) 46 | , e = E(a, this.k + 1) 47 | , f = x(d, this.modulus) 48 | , g = E(f, this.k + 1) 49 | , h = u(e, g); 50 | h.isNeg && (h = t(h, this.bkplus1)); 51 | for (var i = F(h, this.modulus) >= 0; i; ) 52 | h = u(h, this.modulus), 53 | i = F(h, this.modulus) >= 0; 54 | return h 55 | } 56 | function f(a, b) { 57 | var c = x(a, b); 58 | return this.modulo(c) 59 | } 60 | function g(a, b) { 61 | var c = new i; 62 | c.digits[0] = 1; 63 | for (var d = a, e = b; ; ) { 64 | if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)), 65 | e = B(e, 1), 66 | 0 == e.digits[0] && 0 == v(e)) 67 | break; 68 | d = this.multiplyMod(d, d) 69 | } 70 | return c 71 | } 72 | function h(a) { 73 | I = a, 74 | J = new Array(I); 75 | for (var b = 0; b < J.length; b++) 76 | J[b] = 0; 77 | K = new i, 78 | L = new i, 79 | L.digits[0] = 1 80 | } 81 | function i(a) { 82 | "boolean" == typeof a && 1 == a ? this.digits = null : this.digits = J.slice(0), 83 | this.isNeg = !1 84 | } 85 | function k(a) { 86 | var b = new i(!0); 87 | return b.digits = a.digits.slice(0), 88 | b.isNeg = a.isNeg, 89 | b 90 | } 91 | function l(a) { 92 | var b = new i; 93 | b.isNeg = 0 > a, 94 | a = Math.abs(a); 95 | for (var c = 0; a > 0; ) 96 | b.digits[c++] = a & R, 97 | a = Math.floor(a / O); 98 | return b 99 | } 100 | function m(a) { 101 | for (var b = "", c = a.length - 1; c > -1; --c) 102 | b += a.charAt(c); 103 | return b 104 | } 105 | function n(a, b) { 106 | var c = new i; 107 | c.digits[0] = b; 108 | for (var d = G(a, c), e = S[d[1].digits[0]]; 1 == F(d[0], K); ) 109 | d = G(d[0], c), 110 | digit = d[1].digits[0], 111 | e += S[d[1].digits[0]]; 112 | return (a.isNeg ? "-" : "") + m(e) 113 | } 114 | function o(a) { 115 | var b = 15 116 | , c = ""; 117 | for (X = 0; 4 > X; ++X) 118 | c += T[a & b], 119 | a >>>= 4; 120 | return m(c) 121 | } 122 | function p(a) { 123 | for (var b = "", c = (v(a), 124 | v(a)); c > -1; --c) 125 | b += o(a.digits[c]); 126 | return b 127 | } 128 | function q(a) { 129 | var b, c = 48, d = c + 9, e = 97, f = e + 25, g = 65, h = 90; 130 | return b = a >= c && d >= a ? a - c : a >= g && h >= a ? 10 + a - g : a >= e && f >= a ? 10 + a - e : 0 131 | } 132 | function r(a) { 133 | for (var b = 0, c = Math.min(a.length, 4), d = 0; c > d; ++d) 134 | b <<= 4, 135 | b |= q(a.charCodeAt(d)); 136 | return b 137 | } 138 | function s(a) { 139 | for (var b = new i, c = a.length, d = c, e = 0; d > 0; d -= 4, 140 | ++e) 141 | b.digits[e] = r(a.substr(Math.max(d - 4, 0), Math.min(d, 4))); 142 | return b 143 | } 144 | function t(a, b) { 145 | var c; 146 | if (a.isNeg != b.isNeg) 147 | b.isNeg = !b.isNeg, 148 | c = u(a, b), 149 | b.isNeg = !b.isNeg; 150 | else { 151 | c = new i; 152 | for (var d, e = 0, f = 0; f < a.digits.length; ++f) 153 | d = a.digits[f] + b.digits[f] + e, 154 | c.digits[f] = d % O, 155 | e = Number(d >= O); 156 | c.isNeg = a.isNeg 157 | } 158 | return c 159 | } 160 | function u(a, b) { 161 | var c; 162 | if (a.isNeg != b.isNeg) 163 | b.isNeg = !b.isNeg, 164 | c = t(a, b), 165 | b.isNeg = !b.isNeg; 166 | else { 167 | c = new i; 168 | var d, e; 169 | e = 0; 170 | for (var f = 0; f < a.digits.length; ++f) 171 | d = a.digits[f] - b.digits[f] + e, 172 | c.digits[f] = d % O, 173 | c.digits[f] < 0 && (c.digits[f] += O), 174 | e = 0 - Number(0 > d); 175 | if (-1 == e) { 176 | e = 0; 177 | for (var f = 0; f < a.digits.length; ++f) 178 | d = 0 - c.digits[f] + e, 179 | c.digits[f] = d % O, 180 | c.digits[f] < 0 && (c.digits[f] += O), 181 | e = 0 - Number(0 > d); 182 | c.isNeg = !a.isNeg 183 | } else 184 | c.isNeg = a.isNeg 185 | } 186 | return c 187 | } 188 | function v(a) { 189 | for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b]; ) 190 | --b; 191 | return b 192 | } 193 | function w(a) { 194 | var b, c = v(a), d = a.digits[c], e = (c + 1) * N; 195 | for (b = e; b > e - N && 0 == (32768 & d); --b) 196 | d <<= 1; 197 | return b 198 | } 199 | function x(a, b) { 200 | for (var c, d, e, f = new i, g = v(a), h = v(b), k = 0; h >= k; ++k) { 201 | for (c = 0, 202 | e = k, 203 | j = 0; j <= g; ++j, 204 | ++e) 205 | d = f.digits[e] + a.digits[j] * b.digits[k] + c, 206 | f.digits[e] = d & R, 207 | c = d >>> M; 208 | f.digits[k + g + 1] = c 209 | } 210 | return f.isNeg = a.isNeg != b.isNeg, 211 | f 212 | } 213 | function y(a, b) { 214 | var c, d, e; 215 | result = new i, 216 | c = v(a), 217 | d = 0; 218 | for (var f = 0; c >= f; ++f) 219 | e = result.digits[f] + a.digits[f] * b + d, 220 | result.digits[f] = e & R, 221 | d = e >>> M; 222 | return result.digits[1 + c] = d, 223 | result 224 | } 225 | function z(a, b, c, d, e) { 226 | for (var f = Math.min(b + e, a.length), g = b, h = d; f > g; ++g, 227 | ++h) 228 | c[h] = a[g] 229 | } 230 | function A(a, b) { 231 | var c = Math.floor(b / N) 232 | , d = new i; 233 | z(a.digits, 0, d.digits, c, d.digits.length - c); 234 | for (var e = b % N, f = N - e, g = d.digits.length - 1, h = g - 1; g > 0; --g, 235 | --h) 236 | d.digits[g] = d.digits[g] << e & R | (d.digits[h] & U[e]) >>> f; 237 | return d.digits[0] = d.digits[g] << e & R, 238 | d.isNeg = a.isNeg, 239 | d 240 | } 241 | function B(a, b) { 242 | var c = Math.floor(b / N) 243 | , d = new i; 244 | z(a.digits, c, d.digits, 0, a.digits.length - c); 245 | for (var e = b % N, f = N - e, g = 0, h = g + 1; g < d.digits.length - 1; ++g, 246 | ++h) 247 | d.digits[g] = d.digits[g] >>> e | (d.digits[h] & V[e]) << f; 248 | return d.digits[d.digits.length - 1] >>>= e, 249 | d.isNeg = a.isNeg, 250 | d 251 | } 252 | function C(a, b) { 253 | var c = new i; 254 | return z(a.digits, 0, c.digits, b, c.digits.length - b), 255 | c 256 | } 257 | function D(a, b) { 258 | var c = new i; 259 | return z(a.digits, b, c.digits, 0, c.digits.length - b), 260 | c 261 | } 262 | function E(a, b) { 263 | var c = new i; 264 | return z(a.digits, 0, c.digits, 0, b), 265 | c 266 | } 267 | function F(a, b) { 268 | if (a.isNeg != b.isNeg) 269 | return 1 - 2 * Number(a.isNeg); 270 | for (var c = a.digits.length - 1; c >= 0; --c) 271 | if (a.digits[c] != b.digits[c]) 272 | return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]); 273 | return 0 274 | } 275 | function G(a, b) { 276 | var c, d, e = w(a), f = w(b), g = b.isNeg; 277 | if (f > e) 278 | return a.isNeg ? (c = k(L), 279 | c.isNeg = !b.isNeg, 280 | a.isNeg = !1, 281 | b.isNeg = !1, 282 | d = u(b, a), 283 | a.isNeg = !0, 284 | b.isNeg = g) : (c = new i, 285 | d = k(a)), 286 | new Array(c,d); 287 | c = new i, 288 | d = a; 289 | for (var h = Math.ceil(f / N) - 1, j = 0; b.digits[h] < P; ) 290 | b = A(b, 1), 291 | ++j, 292 | ++f, 293 | h = Math.ceil(f / N) - 1; 294 | d = A(d, j), 295 | e += j; 296 | for (var l = Math.ceil(e / N) - 1, m = C(b, l - h); -1 != F(d, m); ) 297 | ++c.digits[l - h], 298 | d = u(d, m); 299 | for (var n = l; n > h; --n) { 300 | var o = n >= d.digits.length ? 0 : d.digits[n] 301 | , p = n - 1 >= d.digits.length ? 0 : d.digits[n - 1] 302 | , q = n - 2 >= d.digits.length ? 0 : d.digits[n - 2] 303 | , r = h >= b.digits.length ? 0 : b.digits[h] 304 | , s = h - 1 >= b.digits.length ? 0 : b.digits[h - 1]; 305 | o == r ? c.digits[n - h - 1] = R : c.digits[n - h - 1] = Math.floor((o * O + p) / r); 306 | for (var x = c.digits[n - h - 1] * (r * O + s), z = o * Q + (p * O + q); x > z; ) 307 | --c.digits[n - h - 1], 308 | x = c.digits[n - h - 1] * (r * O | s), 309 | z = o * O * O + (p * O + q); 310 | m = C(b, n - h - 1), 311 | d = u(d, y(m, c.digits[n - h - 1])), 312 | d.isNeg && (d = t(d, m), 313 | --c.digits[n - h - 1]) 314 | } 315 | return d = B(d, j), 316 | c.isNeg = a.isNeg != g, 317 | a.isNeg && (c = g ? t(c, L) : u(c, L), 318 | b = B(b, j), 319 | d = u(b, d)), 320 | 0 == d.digits[0] && 0 == v(d) && (d.isNeg = !1), 321 | new Array(c,d) 322 | } 323 | function H(a, b) { 324 | return G(a, b)[0] 325 | } 326 | var I, J, K, L, M = 16, N = M, O = 65536, P = O >>> 1, Q = O * O, R = O - 1; 327 | h(20); 328 | var S = (l(1e15), 329 | new Array("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")) 330 | , T = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f") 331 | , U = new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535) 332 | , V = new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535); 333 | Date.prototype.Format = function(a) { 334 | var b = { 335 | "M+": this.getMonth() + 1, 336 | "d+": this.getDate(), 337 | "h+": this.getHours(), 338 | "m+": this.getMinutes(), 339 | "s+": this.getSeconds(), 340 | "q+": Math.floor((this.getMonth() + 3) / 3), 341 | S: this.getMilliseconds() 342 | }; 343 | /(y+)/.test(a) && (a = a.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length))); 344 | for (var c in b) 345 | new RegExp("(" + c + ")").test(a) && (a = a.replace(RegExp.$1, 1 == RegExp.$1.length ? b[c] : ("00" + b[c]).substr(("" + b[c]).length))); 346 | return a 347 | } 348 | ; 349 | var W = ("http://e.eleadbank.com.cn", 350 | { 351 | encrypts: function(a) { 352 | var d = "10001" 353 | , e = a.split("").reverse().join("") 354 | , f = "d741760e63aab01eecf8f2237468da2c9a1f3dfb7de74d8bed23de8eb734b0771aa88ab3acfe3d223f24c057a37f8976cd592a5061fba10cfa212ac7448ef4ce9710a3c5ecb176ed10f55612de976edda1a000faf74923efa80645d0654588c1bc314a28879aeda2ed08b0b83c3582ef3de1fe9125aa67130cdfcd3128732461"; 355 | h(130); 356 | for (var g = new b(d,"",f), i = e.length, j = "", k = 0, l = "", m = 0, n = 128; i - k > 0; ) 357 | l = i - k > n ? c(g, e.substr(k, n)) : c(g, e.substr(k, i - k)), 358 | j = l + j, 359 | m++, 360 | k = m * n; 361 | return j 362 | } 363 | }); 364 | if (window.LeadBase) 365 | for (var X in W) 366 | LeadBase[X] !== W[X] && (LeadBase[X] = W[X]); 367 | else 368 | window.LeadBase = W 369 | }(); 370 | function getPwd(phone, pwd, yzm){ 371 | var encryptData = '{"loginAccount": "' + phone + '","loginPwd": "' + pwd + '","platformType": "WEB"}'; 372 | encryptData = LeadBase.encrypts(encryptData); 373 | var data = "loginAccount=" + phone + "&loginPwd=" + pwd + "&identifyCode=" + yzm + ""; 374 | 375 | return encryptData; 376 | } -------------------------------------------------------------------------------- /07-民投金服(RSA).js: -------------------------------------------------------------------------------- 1 | var window = this; 2 | !function(a) { 3 | function b(a) { 4 | var b = f 5 | , c = b.biDivideByRadixPower(a, this.k - 1) 6 | , d = b.biMultiply(c, this.mu) 7 | , e = b.biDivideByRadixPower(d, this.k + 1) 8 | , g = b.biModuloByRadixPower(a, this.k + 1) 9 | , h = b.biMultiply(e, this.modulus) 10 | , i = b.biModuloByRadixPower(h, this.k + 1) 11 | , j = b.biSubtract(g, i); 12 | j.isNeg && (j = b.biAdd(j, this.bkplus1)); 13 | for (var k = b.biCompare(j, this.modulus) >= 0; k; ) 14 | j = b.biSubtract(j, this.modulus), 15 | k = b.biCompare(j, this.modulus) >= 0; 16 | return j 17 | } 18 | function c(a, b) { 19 | var c = f.biMultiply(a, b); 20 | return this.modulo(c) 21 | } 22 | function d(a, b) { 23 | var c = new s; 24 | c.digits[0] = 1; 25 | for (var d = a, e = b; ; ) { 26 | if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)), 27 | e = f.biShiftRight(e, 1), 28 | 0 == e.digits[0] && 0 == f.biHighIndex(e)) 29 | break; 30 | d = this.multiplyMod(d, d) 31 | } 32 | return c 33 | } 34 | function e(a) { 35 | for (var b = "", c = 0; a > c; c++) 36 | b += Math.floor(10 * Math.random()); 37 | return b 38 | } 39 | if ("undefined" == typeof a.RSAUtils) 40 | var f = a.RSAUtils = {}; 41 | var g, h, k, l, m = 16, n = m, o = 65536, p = o >>> 1, q = o * o, r = o - 1, s = a.BigInt = function(a) { 42 | this.digits = "boolean" == typeof a && 1 == a ? null : h.slice(0), 43 | this.isNeg = !1 44 | } 45 | ; 46 | f.setMaxDigits = function(a) { 47 | g = a, 48 | h = new Array(g); 49 | for (var b = 0; b < h.length; b++) 50 | h[b] = 0; 51 | k = new s, 52 | l = new s, 53 | l.digits[0] = 1 54 | } 55 | , 56 | f.setMaxDigits(20), 57 | f.biCopy = function(a) { 58 | var b = new s(!0); 59 | return b.digits = a.digits.slice(0), 60 | b.isNeg = a.isNeg, 61 | b 62 | } 63 | , 64 | f.reverseStr = function(a) { 65 | for (var b = "", c = a.length - 1; c > -1; --c) 66 | b += a.charAt(c); 67 | return b 68 | } 69 | ; 70 | var t = ["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"]; 71 | f.biToString = function(a, b) { 72 | var c = new s; 73 | c.digits[0] = b; 74 | for (var d = f.biDivideModulo(a, c), e = t[d[1].digits[0]]; 1 == f.biCompare(d[0], k); ) 75 | d = f.biDivideModulo(d[0], c), 76 | digit = d[1].digits[0], 77 | e += t[d[1].digits[0]]; 78 | return (a.isNeg ? "-" : "") + f.reverseStr(e) 79 | } 80 | ; 81 | var u = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"]; 82 | f.digitToHex = function(a) { 83 | var b = 15 84 | , c = ""; 85 | for (i = 0; 4 > i; ++i) 86 | c += u[a & b], 87 | a >>>= 4; 88 | return f.reverseStr(c) 89 | } 90 | , 91 | f.biToHex = function(a) { 92 | for (var b = "", c = (f.biHighIndex(a), 93 | f.biHighIndex(a)); c > -1; --c) 94 | b += f.digitToHex(a.digits[c]); 95 | return b 96 | } 97 | , 98 | f.charToHex = function(a) { 99 | var b, c = 48, d = c + 9, e = 97, f = e + 25, g = 65, h = 90; 100 | return b = a >= c && d >= a ? a - c : a >= g && h >= a ? 10 + a - g : a >= e && f >= a ? 10 + a - e : 0 101 | } 102 | , 103 | f.hexToDigit = function(a) { 104 | for (var b = 0, c = Math.min(a.length, 4), d = 0; c > d; ++d) 105 | b <<= 4, 106 | b |= f.charToHex(a.charCodeAt(d)); 107 | return b 108 | } 109 | , 110 | f.biFromHex = function(a) { 111 | for (var b = new s, c = a.length, d = c, e = 0; d > 0; d -= 4, 112 | ++e) 113 | b.digits[e] = f.hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4))); 114 | return b 115 | } 116 | , 117 | f.biAdd = function(a, b) { 118 | var c; 119 | if (a.isNeg != b.isNeg) 120 | b.isNeg = !b.isNeg, 121 | c = f.biSubtract(a, b), 122 | b.isNeg = !b.isNeg; 123 | else { 124 | c = new s; 125 | for (var d, e = 0, g = 0; g < a.digits.length; ++g) 126 | d = a.digits[g] + b.digits[g] + e, 127 | c.digits[g] = d % o, 128 | e = Number(d >= o); 129 | c.isNeg = a.isNeg 130 | } 131 | return c 132 | } 133 | , 134 | f.biSubtract = function(a, b) { 135 | var c; 136 | if (a.isNeg != b.isNeg) 137 | b.isNeg = !b.isNeg, 138 | c = f.biAdd(a, b), 139 | b.isNeg = !b.isNeg; 140 | else { 141 | c = new s; 142 | var d, e; 143 | e = 0; 144 | for (var g = 0; g < a.digits.length; ++g) 145 | d = a.digits[g] - b.digits[g] + e, 146 | c.digits[g] = d % o, 147 | c.digits[g] < 0 && (c.digits[g] += o), 148 | e = 0 - Number(0 > d); 149 | if (-1 == e) { 150 | e = 0; 151 | for (var g = 0; g < a.digits.length; ++g) 152 | d = 0 - c.digits[g] + e, 153 | c.digits[g] = d % o, 154 | c.digits[g] < 0 && (c.digits[g] += o), 155 | e = 0 - Number(0 > d); 156 | c.isNeg = !a.isNeg 157 | } else 158 | c.isNeg = a.isNeg 159 | } 160 | return c 161 | } 162 | , 163 | f.biHighIndex = function(a) { 164 | for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b]; ) 165 | --b; 166 | return b 167 | } 168 | , 169 | f.biNumBits = function(a) { 170 | var b, c = f.biHighIndex(a), d = a.digits[c], e = (c + 1) * n; 171 | for (b = e; b > e - n && 0 == (32768 & d); --b) 172 | d <<= 1; 173 | return b 174 | } 175 | , 176 | f.biMultiply = function(a, b) { 177 | for (var c, d, e, g = new s, h = f.biHighIndex(a), i = f.biHighIndex(b), k = 0; i >= k; ++k) { 178 | for (c = 0, 179 | e = k, 180 | j = 0; h >= j; ++j, 181 | ++e) 182 | d = g.digits[e] + a.digits[j] * b.digits[k] + c, 183 | g.digits[e] = d & r, 184 | c = d >>> m; 185 | g.digits[k + h + 1] = c 186 | } 187 | return g.isNeg = a.isNeg != b.isNeg, 188 | g 189 | } 190 | , 191 | f.biMultiplyDigit = function(a, b) { 192 | var c, d, e; 193 | result = new s, 194 | c = f.biHighIndex(a), 195 | d = 0; 196 | for (var g = 0; c >= g; ++g) 197 | e = result.digits[g] + a.digits[g] * b + d, 198 | result.digits[g] = e & r, 199 | d = e >>> m; 200 | return result.digits[1 + c] = d, 201 | result 202 | } 203 | , 204 | f.arrayCopy = function(a, b, c, d, e) { 205 | for (var f = Math.min(b + e, a.length), g = b, h = d; f > g; ++g, 206 | ++h) 207 | c[h] = a[g] 208 | } 209 | ; 210 | var v = [0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535]; 211 | f.biShiftLeft = function(a, b) { 212 | var c = Math.floor(b / n) 213 | , d = new s; 214 | f.arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c); 215 | for (var e = b % n, g = n - e, h = d.digits.length - 1, i = h - 1; h > 0; --h, 216 | --i) 217 | d.digits[h] = d.digits[h] << e & r | (d.digits[i] & v[e]) >>> g; 218 | return d.digits[0] = d.digits[h] << e & r, 219 | d.isNeg = a.isNeg, 220 | d 221 | } 222 | ; 223 | var w = [0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535]; 224 | f.biShiftRight = function(a, b) { 225 | var c = Math.floor(b / n) 226 | , d = new s; 227 | f.arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c); 228 | for (var e = b % n, g = n - e, h = 0, i = h + 1; h < d.digits.length - 1; ++h, 229 | ++i) 230 | d.digits[h] = d.digits[h] >>> e | (d.digits[i] & w[e]) << g; 231 | return d.digits[d.digits.length - 1] >>>= e, 232 | d.isNeg = a.isNeg, 233 | d 234 | } 235 | , 236 | f.biMultiplyByRadixPower = function(a, b) { 237 | var c = new s; 238 | return f.arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b), 239 | c 240 | } 241 | , 242 | f.biDivideByRadixPower = function(a, b) { 243 | var c = new s; 244 | return f.arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b), 245 | c 246 | } 247 | , 248 | f.biModuloByRadixPower = function(a, b) { 249 | var c = new s; 250 | return f.arrayCopy(a.digits, 0, c.digits, 0, b), 251 | c 252 | } 253 | , 254 | f.biCompare = function(a, b) { 255 | if (a.isNeg != b.isNeg) 256 | return 1 - 2 * Number(a.isNeg); 257 | for (var c = a.digits.length - 1; c >= 0; --c) 258 | if (a.digits[c] != b.digits[c]) 259 | return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]); 260 | return 0 261 | } 262 | , 263 | f.biDivideModulo = function(a, b) { 264 | var c, d, e = f.biNumBits(a), g = f.biNumBits(b), h = b.isNeg; 265 | if (g > e) 266 | return a.isNeg ? (c = f.biCopy(l), 267 | c.isNeg = !b.isNeg, 268 | a.isNeg = !1, 269 | b.isNeg = !1, 270 | d = biSubtract(b, a), 271 | a.isNeg = !0, 272 | b.isNeg = h) : (c = new s, 273 | d = f.biCopy(a)), 274 | [c, d]; 275 | c = new s, 276 | d = a; 277 | for (var i = Math.ceil(g / n) - 1, j = 0; b.digits[i] < p; ) 278 | b = f.biShiftLeft(b, 1), 279 | ++j, 280 | ++g, 281 | i = Math.ceil(g / n) - 1; 282 | d = f.biShiftLeft(d, j), 283 | e += j; 284 | for (var k = Math.ceil(e / n) - 1, m = f.biMultiplyByRadixPower(b, k - i); -1 != f.biCompare(d, m); ) 285 | ++c.digits[k - i], 286 | d = f.biSubtract(d, m); 287 | for (var t = k; t > i; --t) { 288 | var u = t >= d.digits.length ? 0 : d.digits[t] 289 | , v = t - 1 >= d.digits.length ? 0 : d.digits[t - 1] 290 | , w = t - 2 >= d.digits.length ? 0 : d.digits[t - 2] 291 | , x = i >= b.digits.length ? 0 : b.digits[i] 292 | , y = i - 1 >= b.digits.length ? 0 : b.digits[i - 1]; 293 | c.digits[t - i - 1] = u == x ? r : Math.floor((u * o + v) / x); 294 | for (var z = c.digits[t - i - 1] * (x * o + y), A = u * q + (v * o + w); z > A; ) 295 | --c.digits[t - i - 1], 296 | z = c.digits[t - i - 1] * (x * o | y), 297 | A = u * o * o + (v * o + w); 298 | m = f.biMultiplyByRadixPower(b, t - i - 1), 299 | d = f.biSubtract(d, f.biMultiplyDigit(m, c.digits[t - i - 1])), 300 | d.isNeg && (d = f.biAdd(d, m), 301 | --c.digits[t - i - 1]) 302 | } 303 | return d = f.biShiftRight(d, j), 304 | c.isNeg = a.isNeg != h, 305 | a.isNeg && (c = h ? f.biAdd(c, l) : f.biSubtract(c, l), 306 | b = f.biShiftRight(b, j), 307 | d = f.biSubtract(b, d)), 308 | 0 == d.digits[0] && 0 == f.biHighIndex(d) && (d.isNeg = !1), 309 | [c, d] 310 | } 311 | , 312 | f.biDivide = function(a, b) { 313 | return f.biDivideModulo(a, b)[0] 314 | } 315 | , 316 | f.biModulo = function(a, b) { 317 | return f.biDivideModulo(a, b)[1] 318 | } 319 | , 320 | f.biMultiplyMod = function(a, b, c) { 321 | return f.biModulo(f.biMultiply(a, b), c) 322 | } 323 | , 324 | f.biPow = function(a, b) { 325 | for (var c = l, d = a; ; ) { 326 | if (0 != (1 & b) && (c = f.biMultiply(c, d)), 327 | b >>= 1, 328 | 0 == b) 329 | break; 330 | d = f.biMultiply(d, d) 331 | } 332 | return c 333 | } 334 | , 335 | f.biPowMod = function(a, b, c) { 336 | for (var d = l, e = a, g = b; ; ) { 337 | if (0 != (1 & g.digits[0]) && (d = f.biMultiplyMod(d, e, c)), 338 | g = f.biShiftRight(g, 1), 339 | 0 == g.digits[0] && 0 == f.biHighIndex(g)) 340 | break; 341 | e = f.biMultiplyMod(e, e, c) 342 | } 343 | return d 344 | } 345 | , 346 | a.BarrettMu = function(a) { 347 | this.modulus = f.biCopy(a), 348 | this.k = f.biHighIndex(this.modulus) + 1; 349 | var e = new s; 350 | e.digits[2 * this.k] = 1, 351 | this.mu = f.biDivide(e, this.modulus), 352 | this.bkplus1 = new s, 353 | this.bkplus1.digits[this.k + 1] = 1, 354 | this.modulo = b, 355 | this.multiplyMod = c, 356 | this.powMod = d 357 | } 358 | ; 359 | var x = function(b, c, d, e) { 360 | var g = f; 361 | this.e = g.biFromHex(b), 362 | this.d = g.biFromHex(c), 363 | this.m = g.biFromHex(d), 364 | this.chunkSize = 2 * g.biHighIndex(this.m), 365 | this.radix = 16, 366 | this.barrett = new a.BarrettMu(this.m), 367 | this.rndLen = e 368 | }; 369 | f.getKeyPair = function(a, b, c, d) { 370 | return new x(a,b,c,d) 371 | } 372 | , 373 | "undefined" == typeof a.twoDigit && (a.twoDigit = function(a) { 374 | return (10 > a ? "0" : "") + String(a) 375 | } 376 | ); 377 | var y = "00a862cf2d0d9549a26f73b0d944392c90433fb4ec5a8b3c572bd885dbf77c424f7d60437029aef3a4dc9daaf587697379a639494e21c42f79638914d7ce93de3f6e83d51f8e382dcb506f7a54f82cd7589ca9d8529090209290afb5ba6b8afc282fdabebb5c2e2d78686487a17a4ef519f259430972dbb42c444e15e091b1cc11" 378 | , z = "010001" 379 | , A = "7"; 380 | f.pwdEncode = function(a) { 381 | var b = f.getKeyPair(z, "", y, A); 382 | return f.encryptedString(b, a) 383 | } 384 | , 385 | f.encryptedString = function(a, b) { 386 | for (var c = e(a.rndLen) + b, d = [], g = c.length, h = 0; g > h; ) 387 | d[h] = c.charCodeAt(h), 388 | h++; 389 | for (; d.length % a.chunkSize != 0; ) 390 | d[h++] = 0; 391 | var i, j, k, l = d.length, m = ""; 392 | for (h = 0; l > h; h += a.chunkSize) { 393 | for (k = new s, 394 | i = 0, 395 | j = h; j < h + a.chunkSize; ++i) 396 | k.digits[i] = d[j++], 397 | k.digits[i] += d[j++] << 8; 398 | var n = a.barrett.powMod(k, a.e) 399 | , o = 16 == a.radix ? f.biToHex(n) : f.biToString(n, a.radix); 400 | m += o + " " 401 | } 402 | return m.substring(0, m.length - 1) 403 | } 404 | , 405 | f.setMaxDigits(130) 406 | }(window); 407 | function getPwd(pwd){ 408 | return RSAUtils.pwdEncode(pwd); 409 | } -------------------------------------------------------------------------------- /08-同花顺(RSA).js: -------------------------------------------------------------------------------- 1 | var navigator = {}; 2 | var window = this; 3 | var dbits, canary = 244837814094590, j_lm = 15715070 == (canary & 16777215); 4 | var thspubkey = { 5 | "v": "default_2", 6 | "p": "10001", 7 | "m": "C2D859056373B0178E5EB53D11BA73E4444774E96EAEBE8A25420034443B0B05DB8089BE1008B5F30ED410F3DDAA23C9F8B0E96AE40514C728301C4A145E2DB8856A0E8FAC7B3A5675C53BC8297DBA8111ECB2AA1BE26411F610A819FB2FC02D2BBE900DEFC5C5D5C390F901C0495F17100A7C2ABB0A836DDF62F1BCEA9018F9" 8 | }; 9 | 10 | function BigInteger(b, a, c) { 11 | null != b && ("number" == typeof b ? this.fromNumber(b, a, c) : null == a && "string" != typeof b ? this.fromString(b, 256) : this.fromString(b, a)) 12 | } 13 | function nbi() { 14 | return new BigInteger(null) 15 | } 16 | function am1(b, a, c, d, e, f) { 17 | for (; 0 <= --f; ) { 18 | var g = a * this[b++] + c[d] + e 19 | , e = Math.floor(g / 67108864); 20 | c[d++] = g & 67108863 21 | } 22 | return e 23 | } 24 | function am2(b, a, c, d, e, f) { 25 | for (var g = a & 32767, a = a >> 15; 0 <= --f; ) { 26 | var h = this[b] & 32767 27 | , i = this[b++] >> 15 28 | , k = a * h + i * g 29 | , h = g * h + ((k & 32767) << 15) + c[d] + (e & 1073741823) 30 | , e = (h >>> 30) + (k >>> 15) + a * i + (e >>> 30); 31 | c[d++] = h & 1073741823 32 | } 33 | return e 34 | } 35 | function am3(b, a, c, d, e, f) { 36 | for (var g = a & 16383, a = a >> 14; 0 <= --f; ) { 37 | var h = this[b] & 16383 38 | , i = this[b++] >> 14 39 | , k = a * h + i * g 40 | , h = g * h + ((k & 16383) << 14) + c[d] + e 41 | , e = (h >> 28) + (k >> 14) + a * i; 42 | c[d++] = h & 268435455 43 | } 44 | return e 45 | } 46 | j_lm && "Microsoft Internet Explorer" == navigator.appName ? (BigInteger.prototype.am = am2, 47 | dbits = 30) : j_lm && "Netscape" != navigator.appName ? (BigInteger.prototype.am = am1, 48 | dbits = 26) : (BigInteger.prototype.am = am3, 49 | dbits = 28); 50 | BigInteger.prototype.DB = dbits; 51 | BigInteger.prototype.DM = (1 << dbits) - 1; 52 | BigInteger.prototype.DV = 1 << dbits; 53 | var BI_FP = 52; 54 | BigInteger.prototype.FV = Math.pow(2, BI_FP); 55 | BigInteger.prototype.F1 = BI_FP - dbits; 56 | BigInteger.prototype.F2 = 2 * dbits - BI_FP; 57 | var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz", BI_RC = [], rr, vv; 58 | rr = 48; 59 | for (vv = 0; 9 >= vv; ++vv) 60 | BI_RC[rr++] = vv; 61 | rr = 97; 62 | for (vv = 10; 36 > vv; ++vv) 63 | BI_RC[rr++] = vv; 64 | rr = 65; 65 | for (vv = 10; 36 > vv; ++vv) 66 | BI_RC[rr++] = vv; 67 | function int2char(b) { 68 | return BI_RM.charAt(b) 69 | } 70 | function intAt(b, a) { 71 | var c = BI_RC[b.charCodeAt(a)]; 72 | return null == c ? -1 : c 73 | } 74 | function bnpCopyTo(b) { 75 | for (var a = this.t - 1; 0 <= a; --a) 76 | b[a] = this[a]; 77 | b.t = this.t; 78 | b.s = this.s 79 | } 80 | function bnpFromInt(b) { 81 | this.t = 1; 82 | this.s = 0 > b ? -1 : 0; 83 | 0 < b ? this[0] = b : -1 > b ? this[0] = b + this.DV : this.t = 0 84 | } 85 | function nbv(b) { 86 | var a = nbi(); 87 | a.fromInt(b); 88 | return a 89 | } 90 | function bnpFromString(b, a) { 91 | var c; 92 | if (16 == a) 93 | c = 4; 94 | else if (8 == a) 95 | c = 3; 96 | else if (256 == a) 97 | c = 8; 98 | else if (2 == a) 99 | c = 1; 100 | else if (32 == a) 101 | c = 5; 102 | else if (4 == a) 103 | c = 2; 104 | else { 105 | this.fromRadix(b, a); 106 | return 107 | } 108 | this.s = this.t = 0; 109 | for (var d = b.length, e = !1, f = 0; 0 <= --d; ) { 110 | var g = 8 == c ? b[d] & 255 : intAt(b, d); 111 | 0 > g ? "-" == b.charAt(d) && (e = !0) : (e = !1, 112 | 0 == f ? this[this.t++] = g : f + c > this.DB ? (this[this.t - 1] |= (g & (1 << this.DB - f) - 1) << f, 113 | this[this.t++] = g >> this.DB - f) : this[this.t - 1] |= g << f, 114 | f += c, 115 | f >= this.DB && (f -= this.DB)) 116 | } 117 | if (8 == c && 0 != (b[0] & 128)) 118 | this.s = -1, 119 | 0 < f && (this[this.t - 1] |= (1 << this.DB - f) - 1 << f); 120 | this.clamp(); 121 | e && BigInteger.ZERO.subTo(this, this) 122 | } 123 | function bnpClamp() { 124 | for (var b = this.s & this.DM; 0 < this.t && this[this.t - 1] == b; ) 125 | --this.t 126 | } 127 | function bnToString(b) { 128 | if (0 > this.s) 129 | return "-" + this.negate().toString(b); 130 | if (16 == b) 131 | b = 4; 132 | else if (8 == b) 133 | b = 3; 134 | else if (2 == b) 135 | b = 1; 136 | else if (32 == b) 137 | b = 5; 138 | else if (4 == b) 139 | b = 2; 140 | else 141 | return this.toRadix(b); 142 | var a = (1 << b) - 1, c, d = !1, e = "", f = this.t, g = this.DB - f * this.DB % b; 143 | if (0 < f--) { 144 | if (g < this.DB && 0 < (c = this[f] >> g)) 145 | d = !0, 146 | e = int2char(c); 147 | for (; 0 <= f; ) 148 | g < b ? (c = (this[f] & (1 << g) - 1) << b - g, 149 | c |= this[--f] >> (g += this.DB - b)) : (c = this[f] >> (g -= b) & a, 150 | 0 >= g && (g += this.DB, 151 | --f)), 152 | 0 < c && (d = !0), 153 | d && (e += int2char(c)) 154 | } 155 | return d ? e : "0" 156 | } 157 | function bnNegate() { 158 | var b = nbi(); 159 | BigInteger.ZERO.subTo(this, b); 160 | return b 161 | } 162 | function bnAbs() { 163 | return 0 > this.s ? this.negate() : this 164 | } 165 | function bnCompareTo(b) { 166 | var a = this.s - b.s; 167 | if (0 != a) 168 | return a; 169 | var c = this.t 170 | , a = c - b.t; 171 | if (0 != a) 172 | return 0 > this.s ? -a : a; 173 | for (; 0 <= --c; ) 174 | if (0 != (a = this[c] - b[c])) 175 | return a; 176 | return 0 177 | } 178 | function nbits(b) { 179 | var a = 1, c; 180 | if (0 != (c = b >>> 16)) 181 | b = c, 182 | a += 16; 183 | if (0 != (c = b >> 8)) 184 | b = c, 185 | a += 8; 186 | if (0 != (c = b >> 4)) 187 | b = c, 188 | a += 4; 189 | if (0 != (c = b >> 2)) 190 | b = c, 191 | a += 2; 192 | 0 != b >> 1 && (a += 1); 193 | return a 194 | } 195 | function bnBitLength() { 196 | return 0 >= this.t ? 0 : this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM) 197 | } 198 | function bnpDLShiftTo(b, a) { 199 | var c; 200 | for (c = this.t - 1; 0 <= c; --c) 201 | a[c + b] = this[c]; 202 | for (c = b - 1; 0 <= c; --c) 203 | a[c] = 0; 204 | a.t = this.t + b; 205 | a.s = this.s 206 | } 207 | function bnpDRShiftTo(b, a) { 208 | for (var c = b; c < this.t; ++c) 209 | a[c - b] = this[c]; 210 | a.t = Math.max(this.t - b, 0); 211 | a.s = this.s 212 | } 213 | function bnpLShiftTo(b, a) { 214 | var c = b % this.DB, d = this.DB - c, e = (1 << d) - 1, f = Math.floor(b / this.DB), g = this.s << c & this.DM, h; 215 | for (h = this.t - 1; 0 <= h; --h) 216 | a[h + f + 1] = this[h] >> d | g, 217 | g = (this[h] & e) << c; 218 | for (h = f - 1; 0 <= h; --h) 219 | a[h] = 0; 220 | a[f] = g; 221 | a.t = this.t + f + 1; 222 | a.s = this.s; 223 | a.clamp() 224 | } 225 | function bnpRShiftTo(b, a) { 226 | a.s = this.s; 227 | var c = Math.floor(b / this.DB); 228 | if (c >= this.t) 229 | a.t = 0; 230 | else { 231 | var d = b % this.DB 232 | , e = this.DB - d 233 | , f = (1 << d) - 1; 234 | a[0] = this[c] >> d; 235 | for (var g = c + 1; g < this.t; ++g) 236 | a[g - c - 1] |= (this[g] & f) << e, 237 | a[g - c] = this[g] >> d; 238 | 0 < d && (a[this.t - c - 1] |= (this.s & f) << e); 239 | a.t = this.t - c; 240 | a.clamp() 241 | } 242 | } 243 | function bnpSubTo(b, a) { 244 | for (var c = 0, d = 0, e = Math.min(b.t, this.t); c < e; ) 245 | d += this[c] - b[c], 246 | a[c++] = d & this.DM, 247 | d >>= this.DB; 248 | if (b.t < this.t) { 249 | for (d -= b.s; c < this.t; ) 250 | d += this[c], 251 | a[c++] = d & this.DM, 252 | d >>= this.DB; 253 | d += this.s 254 | } else { 255 | for (d += this.s; c < b.t; ) 256 | d -= b[c], 257 | a[c++] = d & this.DM, 258 | d >>= this.DB; 259 | d -= b.s 260 | } 261 | a.s = 0 > d ? -1 : 0; 262 | -1 > d ? a[c++] = this.DV + d : 0 < d && (a[c++] = d); 263 | a.t = c; 264 | a.clamp() 265 | } 266 | function bnpMultiplyTo(b, a) { 267 | var c = this.abs() 268 | , d = b.abs() 269 | , e = c.t; 270 | for (a.t = e + d.t; 0 <= --e; ) 271 | a[e] = 0; 272 | for (e = 0; e < d.t; ++e) 273 | a[e + c.t] = c.am(0, d[e], a, e, 0, c.t); 274 | a.s = 0; 275 | a.clamp(); 276 | this.s != b.s && BigInteger.ZERO.subTo(a, a) 277 | } 278 | function bnpSquareTo(b) { 279 | for (var a = this.abs(), c = b.t = 2 * a.t; 0 <= --c; ) 280 | b[c] = 0; 281 | for (c = 0; c < a.t - 1; ++c) { 282 | var d = a.am(c, a[c], b, 2 * c, 0, 1); 283 | if ((b[c + a.t] += a.am(c + 1, 2 * a[c], b, 2 * c + 1, d, a.t - c - 1)) >= a.DV) 284 | b[c + a.t] -= a.DV, 285 | b[c + a.t + 1] = 1 286 | } 287 | 0 < b.t && (b[b.t - 1] += a.am(c, a[c], b, 2 * c, 0, 1)); 288 | b.s = 0; 289 | b.clamp() 290 | } 291 | function bnpDivRemTo(b, a, c) { 292 | var d = b.abs(); 293 | if (!(0 >= d.t)) { 294 | var e = this.abs(); 295 | if (e.t < d.t) 296 | null != a && a.fromInt(0), 297 | null != c && this.copyTo(c); 298 | else { 299 | null == c && (c = nbi()); 300 | var f = nbi() 301 | , g = this.s 302 | , b = b.s 303 | , h = this.DB - nbits(d[d.t - 1]); 304 | 0 < h ? (d.lShiftTo(h, f), 305 | e.lShiftTo(h, c)) : (d.copyTo(f), 306 | e.copyTo(c)); 307 | d = f.t; 308 | e = f[d - 1]; 309 | if (0 != e) { 310 | var i = e * (1 << this.F1) + (1 < d ? f[d - 2] >> this.F2 : 0) 311 | , k = this.FV / i 312 | , i = (1 << this.F1) / i 313 | , o = 1 << this.F2 314 | , l = c.t 315 | , m = l - d 316 | , j = null == a ? nbi() : a; 317 | f.dlShiftTo(m, j); 318 | 0 <= c.compareTo(j) && (c[c.t++] = 1, 319 | c.subTo(j, c)); 320 | BigInteger.ONE.dlShiftTo(d, j); 321 | for (j.subTo(f, f); f.t < d; ) 322 | f[f.t++] = 0; 323 | for (; 0 <= --m; ) { 324 | var n = c[--l] == e ? this.DM : Math.floor(c[l] * k + (c[l - 1] + o) * i); 325 | if ((c[l] += f.am(0, n, c, m, 0, d)) < n) { 326 | f.dlShiftTo(m, j); 327 | for (c.subTo(j, c); c[l] < --n; ) 328 | c.subTo(j, c) 329 | } 330 | } 331 | null != a && (c.drShiftTo(d, a), 332 | g != b && BigInteger.ZERO.subTo(a, a)); 333 | c.t = d; 334 | c.clamp(); 335 | 0 < h && c.rShiftTo(h, c); 336 | 0 > g && BigInteger.ZERO.subTo(c, c) 337 | } 338 | } 339 | } 340 | } 341 | function bnMod(b) { 342 | var a = nbi(); 343 | this.abs().divRemTo(b, null, a); 344 | 0 > this.s && 0 < a.compareTo(BigInteger.ZERO) && b.subTo(a, a); 345 | return a 346 | } 347 | function Classic(b) { 348 | this.m = b 349 | } 350 | function cConvert(b) { 351 | return 0 > b.s || 0 <= b.compareTo(this.m) ? b.mod(this.m) : b 352 | } 353 | function cRevert(b) { 354 | return b 355 | } 356 | function cReduce(b) { 357 | b.divRemTo(this.m, null, b) 358 | } 359 | function cMulTo(b, a, c) { 360 | b.multiplyTo(a, c); 361 | this.reduce(c) 362 | } 363 | function cSqrTo(b, a) { 364 | b.squareTo(a); 365 | this.reduce(a) 366 | } 367 | Classic.prototype.convert = cConvert; 368 | Classic.prototype.revert = cRevert; 369 | Classic.prototype.reduce = cReduce; 370 | Classic.prototype.mulTo = cMulTo; 371 | Classic.prototype.sqrTo = cSqrTo; 372 | function bnpInvDigit() { 373 | if (1 > this.t) 374 | return 0; 375 | var b = this[0]; 376 | if (0 == (b & 1)) 377 | return 0; 378 | var a = b & 3 379 | , a = a * (2 - (b & 15) * a) & 15 380 | , a = a * (2 - (b & 255) * a) & 255 381 | , a = a * (2 - ((b & 65535) * a & 65535)) & 65535 382 | , a = a * (2 - b * a % this.DV) % this.DV; 383 | return 0 < a ? this.DV - a : -a 384 | } 385 | function Montgomery(b) { 386 | this.m = b; 387 | this.mp = b.invDigit(); 388 | this.mpl = this.mp & 32767; 389 | this.mph = this.mp >> 15; 390 | this.um = (1 << b.DB - 15) - 1; 391 | this.mt2 = 2 * b.t 392 | } 393 | function montConvert(b) { 394 | var a = nbi(); 395 | b.abs().dlShiftTo(this.m.t, a); 396 | a.divRemTo(this.m, null, a); 397 | 0 > b.s && 0 < a.compareTo(BigInteger.ZERO) && this.m.subTo(a, a); 398 | return a 399 | } 400 | function montRevert(b) { 401 | var a = nbi(); 402 | b.copyTo(a); 403 | this.reduce(a); 404 | return a 405 | } 406 | function montReduce(b) { 407 | for (; b.t <= this.mt2; ) 408 | b[b.t++] = 0; 409 | for (var a = 0; a < this.m.t; ++a) { 410 | var c = b[a] & 32767 411 | , d = c * this.mpl + ((c * this.mph + (b[a] >> 15) * this.mpl & this.um) << 15) & b.DM 412 | , c = a + this.m.t; 413 | for (b[c] += this.m.am(0, d, b, a, 0, this.m.t); b[c] >= b.DV; ) 414 | b[c] -= b.DV, 415 | b[++c]++ 416 | } 417 | b.clamp(); 418 | b.drShiftTo(this.m.t, b); 419 | 0 <= b.compareTo(this.m) && b.subTo(this.m, b) 420 | } 421 | function montSqrTo(b, a) { 422 | b.squareTo(a); 423 | this.reduce(a) 424 | } 425 | function montMulTo(b, a, c) { 426 | b.multiplyTo(a, c); 427 | this.reduce(c) 428 | } 429 | Montgomery.prototype.convert = montConvert; 430 | Montgomery.prototype.revert = montRevert; 431 | Montgomery.prototype.reduce = montReduce; 432 | Montgomery.prototype.mulTo = montMulTo; 433 | Montgomery.prototype.sqrTo = montSqrTo; 434 | function bnpIsEven() { 435 | return 0 == (0 < this.t ? this[0] & 1 : this.s) 436 | } 437 | function bnpExp(b, a) { 438 | if (4294967295 < b || 1 > b) 439 | return BigInteger.ONE; 440 | var c = nbi() 441 | , d = nbi() 442 | , e = a.convert(this) 443 | , f = nbits(b) - 1; 444 | for (e.copyTo(c); 0 <= --f; ) 445 | if (a.sqrTo(c, d), 446 | 0 < (b & 1 << f)) 447 | a.mulTo(d, e, c); 448 | else 449 | var g = c 450 | , c = d 451 | , d = g; 452 | return a.revert(c) 453 | } 454 | function bnModPowInt(b, a) { 455 | var c; 456 | c = 256 > b || a.isEven() ? new Classic(a) : new Montgomery(a); 457 | return this.exp(b, c) 458 | } 459 | BigInteger.prototype.copyTo = bnpCopyTo; 460 | BigInteger.prototype.fromInt = bnpFromInt; 461 | BigInteger.prototype.fromString = bnpFromString; 462 | BigInteger.prototype.clamp = bnpClamp; 463 | BigInteger.prototype.dlShiftTo = bnpDLShiftTo; 464 | BigInteger.prototype.drShiftTo = bnpDRShiftTo; 465 | BigInteger.prototype.lShiftTo = bnpLShiftTo; 466 | BigInteger.prototype.rShiftTo = bnpRShiftTo; 467 | BigInteger.prototype.subTo = bnpSubTo; 468 | BigInteger.prototype.multiplyTo = bnpMultiplyTo; 469 | BigInteger.prototype.squareTo = bnpSquareTo; 470 | BigInteger.prototype.divRemTo = bnpDivRemTo; 471 | BigInteger.prototype.invDigit = bnpInvDigit; 472 | BigInteger.prototype.isEven = bnpIsEven; 473 | BigInteger.prototype.exp = bnpExp; 474 | BigInteger.prototype.toString = bnToString; 475 | BigInteger.prototype.negate = bnNegate; 476 | BigInteger.prototype.abs = bnAbs; 477 | BigInteger.prototype.compareTo = bnCompareTo; 478 | BigInteger.prototype.bitLength = bnBitLength; 479 | BigInteger.prototype.mod = bnMod; 480 | BigInteger.prototype.modPowInt = bnModPowInt; 481 | BigInteger.ZERO = nbv(0); 482 | BigInteger.ONE = nbv(1); 483 | function Arcfour() { 484 | this.j = this.i = 0; 485 | this.S = [] 486 | } 487 | function ARC4init(b) { 488 | var a, c, d; 489 | for (a = 0; 256 > a; ++a) 490 | this.S[a] = a; 491 | for (a = c = 0; 256 > a; ++a) 492 | c = c + this.S[a] + b[a % b.length] & 255, 493 | d = this.S[a], 494 | this.S[a] = this.S[c], 495 | this.S[c] = d; 496 | this.j = this.i = 0 497 | } 498 | function ARC4next() { 499 | var b; 500 | this.i = this.i + 1 & 255; 501 | this.j = this.j + this.S[this.i] & 255; 502 | b = this.S[this.i]; 503 | this.S[this.i] = this.S[this.j]; 504 | this.S[this.j] = b; 505 | return this.S[b + this.S[this.i] & 255] 506 | } 507 | Arcfour.prototype.init = ARC4init; 508 | Arcfour.prototype.next = ARC4next; 509 | function prng_newstate() { 510 | return new Arcfour 511 | } 512 | var rng_psize = 256, rng_state, rng_pool, rng_pptr; 513 | function rng_seed_int(b) { 514 | rng_pool[rng_pptr++] ^= b & 255; 515 | rng_pool[rng_pptr++] ^= b >> 8 & 255; 516 | rng_pool[rng_pptr++] ^= b >> 16 & 255; 517 | rng_pool[rng_pptr++] ^= b >> 24 & 255; 518 | rng_pptr >= rng_psize && (rng_pptr -= rng_psize) 519 | } 520 | function rng_seed_time() { 521 | rng_seed_int((new Date).getTime()) 522 | } 523 | if (null == rng_pool) { 524 | rng_pool = []; 525 | rng_pptr = 0; 526 | var t; 527 | if (window.crypto && window.crypto.getRandomValues) { 528 | var ua = new Uint8Array(32); 529 | window.crypto.getRandomValues(ua); 530 | for (t = 0; 32 > t; ++t) 531 | rng_pool[rng_pptr++] = ua[t] 532 | } 533 | if ("Netscape" == navigator.appName && "5" > navigator.appVersion && window.crypto) { 534 | var z = window.crypto.random(32); 535 | for (t = 0; t < z.length; ++t) 536 | rng_pool[rng_pptr++] = z.charCodeAt(t) & 255 537 | } 538 | for (; rng_pptr < rng_psize; ) 539 | t = Math.floor(65536 * Math.random()), 540 | rng_pool[rng_pptr++] = t >>> 8, 541 | rng_pool[rng_pptr++] = t & 255; 542 | rng_pptr = 0; 543 | rng_seed_time() 544 | } 545 | function rng_get_byte() { 546 | if (null == rng_state) { 547 | rng_seed_time(); 548 | rng_state = prng_newstate(); 549 | rng_state.init(rng_pool); 550 | for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) 551 | rng_pool[rng_pptr] = 0; 552 | rng_pptr = 0 553 | } 554 | return rng_state.next() 555 | } 556 | function rng_get_bytes(b) { 557 | var a; 558 | for (a = 0; a < b.length; ++a) 559 | b[a] = rng_get_byte() 560 | } 561 | function SecureRandom() {} 562 | SecureRandom.prototype.nextBytes = rng_get_bytes; 563 | function parseBigInt(b, a) { 564 | return new BigInteger(b,a) 565 | } 566 | function linebrk(b, a) { 567 | for (var c = "", d = 0; d + a < b.length; ) 568 | c += b.substring(d, d + a) + "\n", 569 | d += a; 570 | return c + b.substring(d, b.length) 571 | } 572 | function byte2Hex(b) { 573 | return 16 > b ? "0" + b.toString(16) : b.toString(16) 574 | } 575 | function pkcs1pad2(b, a) { 576 | if (a < b.length + 11) 577 | return alert("Message too long for RSA"), 578 | null; 579 | for (var c = [], d = b.length - 1; 0 <= d && 0 < a; ) { 580 | var e = b.charCodeAt(d--); 581 | 128 > e ? c[--a] = e : 127 < e && 2048 > e ? (c[--a] = e & 63 | 128, 582 | c[--a] = e >> 6 | 192) : (c[--a] = e & 63 | 128, 583 | c[--a] = e >> 6 & 63 | 128, 584 | c[--a] = e >> 12 | 224) 585 | } 586 | c[--a] = 0; 587 | d = new SecureRandom; 588 | for (e = []; 2 < a; ) { 589 | for (e[0] = 0; 0 == e[0]; ) 590 | d.nextBytes(e); 591 | c[--a] = e[0] 592 | } 593 | c[--a] = 2; 594 | c[--a] = 0; 595 | return new BigInteger(c) 596 | } 597 | function RSAKey() { 598 | this.n = null; 599 | this.e = 0; 600 | this.coeff = this.dmq1 = this.dmp1 = this.q = this.p = this.d = null 601 | } 602 | function RSASetPublic(b, a) { 603 | null != b && null != a && 0 < b.length && 0 < a.length ? (this.n = parseBigInt(b, 16), 604 | this.e = parseInt(a, 16)) : alert("Invalid RSA public key") 605 | } 606 | function RSADoPublic(b) { 607 | return b.modPowInt(this.e, this.n) 608 | } 609 | function RSAEncrypt(b) { 610 | b = pkcs1pad2(b, this.n.bitLength() + 7 >> 3); 611 | if (null == b) 612 | return null; 613 | b = this.doPublic(b); 614 | if (null == b) 615 | return null; 616 | b = b.toString(16); 617 | return 0 == (b.length & 1) ? b : "0" + b 618 | } 619 | RSAKey.prototype.doPublic = RSADoPublic; 620 | RSAKey.prototype.setPublic = RSASetPublic; 621 | RSAKey.prototype.encrypt = RSAEncrypt; 622 | var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 623 | , b64padchar = "="; 624 | function hex2b64(b) { 625 | var a, c, d = ""; 626 | for (a = 0; a + 3 <= b.length; a += 3) 627 | c = parseInt(b.substring(a, a + 3), 16), 628 | d += b64map.charAt(c >> 6) + b64map.charAt(c & 63); 629 | a + 1 == b.length ? (c = parseInt(b.substring(a, a + 1), 16), 630 | d += b64map.charAt(c << 2)) : a + 2 == b.length && (c = parseInt(b.substring(a, a + 2), 16), 631 | d += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4)); 632 | for (; 0 < (d.length & 3); ) 633 | d += b64padchar; 634 | return d 635 | } 636 | function b64tohex(b) { 637 | var a = "", c, d = 0, e; 638 | for (c = 0; c < b.length && !(b.charAt(c) == b64padchar); ++c) { 639 | v = b64map.indexOf(b.charAt(c)); 640 | 0 > v || (0 == d ? (a += int2char(v >> 2), 641 | e = v & 3, 642 | d = 1) : 1 == d ? (a += int2char(e << 2 | v >> 4), 643 | e = v & 15, 644 | d = 2) : 2 == d ? (a += int2char(e), 645 | a += int2char(v >> 2), 646 | e = v & 3, 647 | d = 3) : (a += int2char(e << 2 | v >> 4), 648 | a += int2char(v & 15), 649 | d = 0)) 650 | } 651 | 1 == d && (a += int2char(e << 2)); 652 | return a 653 | } 654 | function b64toBA(b) { 655 | var b = b64tohex(b), a, c = []; 656 | for (a = 0; 2 * a < b.length; ++a) 657 | c[a] = parseInt(b.substring(2 * a, 2 * a + 2), 16); 658 | return c 659 | } 660 | var thsencrypt = { 661 | version: "", 662 | modulus: "", 663 | publicExponent: "", 664 | pubkeyScriptId: "__ths_pubkey__" 665 | } 666 | , protocol = "http:"; 667 | "file:" === protocol && (protocol = "http:"); 668 | thsencrypt.pubkeyUrl = protocol + "//upass.10jqka.com.cn/pubkey/default.js"; 669 | thsencrypt.encode = function(b) { 670 | return encryptEncode(b, thsencrypt.modulus, thsencrypt.publicExponent) 671 | } 672 | ; 673 | thsencrypt.getVersion = function() { 674 | return thsencrypt.version 675 | } 676 | ; 677 | thsencrypt.setPubkeyUrl = function(b) { 678 | thsencrypt.pubkeyUrl = b; 679 | return thsencrypt 680 | } 681 | ; 682 | function encryptEncode(b, a, c) { 683 | var d; 684 | d = new RSAKey; 685 | d.setPublic(a, c); 686 | b = d.encrypt(b); 687 | if (!b) 688 | throw Error("encrypt failed"); 689 | return hex2b64(b) 690 | } 691 | thsencrypt.load = function(b, a) { 692 | var c = document.getElementById(thsencrypt.pubkeyScriptId); 693 | c && document.body.removeChild(c); 694 | c = document.createElement("script"); 695 | c.id = thsencrypt.pubkeyScriptId; 696 | c.language = "JavaScript"; 697 | c.type = "text/javascript"; 698 | c.src = thsencrypt.pubkeyUrl; 699 | document.body.appendChild(c); 700 | isIE() ? c.onreadystatechange = function(d) { 701 | if ("loaded" == c.readyState || "complete" == c.readyState) 702 | "undefined" !== typeof thspubkey ? (initPubkey(), 703 | "function" === typeof b && b(d)) : "function" === typeof a && a(d) 704 | } 705 | : (c.onload = function(a) { 706 | initPubkey(); 707 | "function" === typeof b && b(a) 708 | } 709 | , 710 | c.onerror = function(b) { 711 | "function" === typeof a && a(b) 712 | } 713 | ) 714 | } 715 | ; 716 | function isIE() { 717 | var b, a; 718 | b = navigator.userAgent; 719 | a = -1 < b.indexOf("Opera"); 720 | return -1 < b.indexOf("compatible") && -1 < b.indexOf("MSIE") && !a 721 | } 722 | function initPubkey() { 723 | thsencrypt.version = thspubkey.v; 724 | thsencrypt.modulus = thspubkey.m; 725 | thsencrypt.publicExponent = thspubkey.p 726 | } 727 | "undefined" !== typeof thspubkey && "" === thsencrypt.version && initPubkey(); 728 | function getpwd(pwd){ 729 | return thsencrypt.encode(pwd); 730 | } -------------------------------------------------------------------------------- /09-金融界(md5).js: -------------------------------------------------------------------------------- 1 | var md5; 2 | (function() { 3 | var hexcase = 0; 4 | var b64pad = ""; 5 | var chrsz = 8; 6 | function hex_md5(s) { 7 | return binl2hex(core_md5(str2binl(s), s.length * chrsz)); 8 | } 9 | function b64_md5(s) { 10 | return binl2b64(core_md5(str2binl(s), s.length * chrsz)); 11 | } 12 | function str_md5(s) { 13 | return binl2str(core_md5(str2binl(s), s.length * chrsz)); 14 | } 15 | function hex_hmac_md5(key, data) { 16 | return binl2hex(core_hmac_md5(key, data)); 17 | } 18 | function b64_hmac_md5(key, data) { 19 | return binl2b64(core_hmac_md5(key, data)); 20 | } 21 | function str_hmac_md5(key, data) { 22 | return binl2str(core_hmac_md5(key, data)); 23 | } 24 | function md5_vm_test() { 25 | return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"; 26 | } 27 | function core_md5(x, len) { 28 | x[len >> 5] |= 0x80 << ((len) % 32); 29 | x[(((len + 64) >>> 9) << 4) + 14] = len; 30 | var a = 1732584193; 31 | var b = -271733879; 32 | var c = -1732584194; 33 | var d = 271733878; 34 | for (var i = 0; i < x.length; i += 16) { 35 | var olda = a; 36 | var oldb = b; 37 | var oldc = c; 38 | var oldd = d; 39 | a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936); 40 | d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586); 41 | c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819); 42 | b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330); 43 | a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897); 44 | d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426); 45 | c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341); 46 | b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983); 47 | a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416); 48 | d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417); 49 | c = md5_ff(c, d, a, b, x[i + 10], 17, -42063); 50 | b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162); 51 | a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682); 52 | d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101); 53 | c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290); 54 | b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329); 55 | a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510); 56 | d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632); 57 | c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713); 58 | b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302); 59 | a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691); 60 | d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083); 61 | c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335); 62 | b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848); 63 | a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438); 64 | d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690); 65 | c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961); 66 | b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501); 67 | a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467); 68 | d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784); 69 | c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473); 70 | b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734); 71 | a = md5_hh(a, b, c, d, x[i + 5], 4, -378558); 72 | d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463); 73 | c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562); 74 | b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556); 75 | a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060); 76 | d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353); 77 | c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632); 78 | b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640); 79 | a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174); 80 | d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222); 81 | c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979); 82 | b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189); 83 | a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487); 84 | d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835); 85 | c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520); 86 | b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651); 87 | a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844); 88 | d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415); 89 | c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905); 90 | b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055); 91 | a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571); 92 | d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606); 93 | c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523); 94 | b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799); 95 | a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359); 96 | d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744); 97 | c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380); 98 | b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649); 99 | a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070); 100 | d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379); 101 | c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259); 102 | b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551); 103 | a = safe_add(a, olda); 104 | b = safe_add(b, oldb); 105 | c = safe_add(c, oldc); 106 | d = safe_add(d, oldd); 107 | } 108 | return Array(a, b, c, d); 109 | } 110 | function md5_cmn(q, a, b, x, s, t) { 111 | return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b); 112 | } 113 | function md5_ff(a, b, c, d, x, s, t) { 114 | return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); 115 | } 116 | function md5_gg(a, b, c, d, x, s, t) { 117 | return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); 118 | } 119 | function md5_hh(a, b, c, d, x, s, t) { 120 | return md5_cmn(b ^ c ^ d, a, b, x, s, t); 121 | } 122 | function md5_ii(a, b, c, d, x, s, t) { 123 | return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); 124 | } 125 | function core_hmac_md5(key, data) { 126 | var bkey = str2binl(key); 127 | if (bkey.length > 16) 128 | bkey = core_md5(bkey, key.length * chrsz); 129 | var ipad = Array(16) 130 | , opad = Array(16); 131 | for (var i = 0; i < 16; i++) { 132 | ipad[i] = bkey[i] ^ 0x36363636; 133 | opad[i] = bkey[i] ^ 0x5C5C5C5C; 134 | } 135 | var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); 136 | return core_md5(opad.concat(hash), 512 + 128); 137 | } 138 | function safe_add(x, y) { 139 | var lsw = (x & 0xFFFF) + (y & 0xFFFF); 140 | var msw = (x >> 16) + (y >> 16) + (lsw >> 16); 141 | return (msw << 16) | (lsw & 0xFFFF); 142 | } 143 | function bit_rol(num, cnt) { 144 | return (num << cnt) | (num >>> (32 - cnt)); 145 | } 146 | function str2binl(str) { 147 | var bin = Array(); 148 | var mask = (1 << chrsz) - 1; 149 | for (var i = 0; i < str.length * chrsz; i += chrsz) 150 | bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32); 151 | return bin; 152 | } 153 | function binl2str(bin) { 154 | var str = ""; 155 | var mask = (1 << chrsz) - 1; 156 | for (var i = 0; i < bin.length * 32; i += chrsz) 157 | str += String.fromCharCode((bin[i >> 5] >>> (i % 32)) & mask); 158 | return str; 159 | } 160 | function binl2hex(binarray) { 161 | var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; 162 | var str = ""; 163 | for (var i = 0; i < binarray.length * 4; i++) { 164 | str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF); 165 | } 166 | return str; 167 | } 168 | function binl2b64(binarray) { 169 | var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 170 | var str = ""; 171 | for (var i = 0; i < binarray.length * 4; i += 3) { 172 | var triplet = (((binarray[i >> 2] >> 8 * (i % 4)) & 0xFF) << 16) | (((binarray[i + 1 >> 2] >> 8 * ((i + 1) % 4)) & 0xFF) << 8) | ((binarray[i + 2 >> 2] >> 8 * ((i + 2) % 4)) & 0xFF); 173 | for (var j = 0; j < 4; j++) { 174 | if (i * 8 + j * 6 > binarray.length * 32) 175 | str += b64pad; 176 | else 177 | str += tab.charAt((triplet >> 6 * (3 - j)) & 0x3F); 178 | } 179 | } 180 | return str; 181 | } 182 | md5 = hex_md5; 183 | } 184 | )(); 185 | function getPwd(pwd){ 186 | return md5("123"); 187 | } 188 | -------------------------------------------------------------------------------- /13-shop99(md5).js: -------------------------------------------------------------------------------- 1 | /* 2 | * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message 3 | * Digest Algorithm, as defined in RFC 1321. 4 | * Copyright (C) Paul Johnston 1999 - 2000. 5 | * Updated by Greg Holt 2000 - 2001. 6 | * See http://pajhome.org.uk/site/legal.html for details. 7 | */ 8 | var hex_chr = "0123456789abcdef"; 9 | function rhex(num) 10 | { 11 | str = ""; 12 | for(j = 0; j <= 3; j++) 13 | str += hex_chr.charAt((num >> (j * 8 + 4)) & 0x0F) + 14 | hex_chr.charAt((num >> (j * 8)) & 0x0F); 15 | return str; 16 | } 17 | function str2blks_MD5(str) 18 | { 19 | nblk = ((str.length + 8) >> 6) + 1; 20 | blks = new Array(nblk * 16); 21 | for(i = 0; i < nblk * 16; i++) blks[i] = 0; 22 | for(i = 0; i < str.length; i++) 23 | blks[i >> 2] |= str.charCodeAt(i) << ((i % 4) * 8); 24 | blks[i >> 2] |= 0x80 << ((i % 4) * 8); 25 | blks[nblk * 16 - 2] = str.length * 8; 26 | return blks; 27 | } 28 | function add(x, y) 29 | { 30 | var lsw = (x & 0xFFFF) + (y & 0xFFFF); 31 | var msw = (x >> 16) + (y >> 16) + (lsw >> 16); 32 | return (msw << 16) | (lsw & 0xFFFF); 33 | } 34 | function rol(num, cnt) 35 | { 36 | return (num << cnt) | (num >>> (32 - cnt)); 37 | } 38 | function cmn(q, a, b, x, s, t) 39 | { 40 | return add(rol(add(add(a, q), add(x, t)), s), b); 41 | } 42 | function ff(a, b, c, d, x, s, t) 43 | { 44 | return cmn((b & c) | ((~b) & d), a, b, x, s, t); 45 | } 46 | function gg(a, b, c, d, x, s, t) 47 | { 48 | return cmn((b & d) | (c & (~d)), a, b, x, s, t); 49 | } 50 | function hh(a, b, c, d, x, s, t) 51 | { 52 | return cmn(b ^ c ^ d, a, b, x, s, t); 53 | } 54 | function ii(a, b, c, d, x, s, t) 55 | { 56 | return cmn(c ^ (b | (~d)), a, b, x, s, t); 57 | } 58 | function MD5(str) 59 | { 60 | x = str2blks_MD5(str); 61 | var a = 1732584193; 62 | var b = -271733879; 63 | var c = -1732584194; 64 | var d = 271733878; 65 | for(i = 0; i < x.length; i += 16) 66 | { 67 | var olda = a; 68 | var oldb = b; 69 | var oldc = c; 70 | var oldd = d; 71 | a = ff(a, b, c, d, x[i+ 0], 7 , -680876936); 72 | d = ff(d, a, b, c, x[i+ 1], 12, -389564586); 73 | c = ff(c, d, a, b, x[i+ 2], 17, 606105819); 74 | b = ff(b, c, d, a, x[i+ 3], 22, -1044525330); 75 | a = ff(a, b, c, d, x[i+ 4], 7 , -176418897); 76 | d = ff(d, a, b, c, x[i+ 5], 12, 1200080426); 77 | c = ff(c, d, a, b, x[i+ 6], 17, -1473231341); 78 | b = ff(b, c, d, a, x[i+ 7], 22, -45705983); 79 | a = ff(a, b, c, d, x[i+ 8], 7 , 1770035416); 80 | d = ff(d, a, b, c, x[i+ 9], 12, -1958414417); 81 | c = ff(c, d, a, b, x[i+10], 17, -42063); 82 | b = ff(b, c, d, a, x[i+11], 22, -1990404162); 83 | a = ff(a, b, c, d, x[i+12], 7 , 1804603682); 84 | d = ff(d, a, b, c, x[i+13], 12, -40341101); 85 | c = ff(c, d, a, b, x[i+14], 17, -1502002290); 86 | b = ff(b, c, d, a, x[i+15], 22, 1236535329); 87 | a = gg(a, b, c, d, x[i+ 1], 5 , -165796510); 88 | d = gg(d, a, b, c, x[i+ 6], 9 , -1069501632); 89 | c = gg(c, d, a, b, x[i+11], 14, 643717713); 90 | b = gg(b, c, d, a, x[i+ 0], 20, -373897302); 91 | a = gg(a, b, c, d, x[i+ 5], 5 , -701558691); 92 | d = gg(d, a, b, c, x[i+10], 9 , 38016083); 93 | c = gg(c, d, a, b, x[i+15], 14, -660478335); 94 | b = gg(b, c, d, a, x[i+ 4], 20, -405537848); 95 | a = gg(a, b, c, d, x[i+ 9], 5 , 568446438); 96 | d = gg(d, a, b, c, x[i+14], 9 , -1019803690); 97 | c = gg(c, d, a, b, x[i+ 3], 14, -187363961); 98 | b = gg(b, c, d, a, x[i+ 8], 20, 1163531501); 99 | a = gg(a, b, c, d, x[i+13], 5 , -1444681467); 100 | d = gg(d, a, b, c, x[i+ 2], 9 , -51403784); 101 | c = gg(c, d, a, b, x[i+ 7], 14, 1735328473); 102 | b = gg(b, c, d, a, x[i+12], 20, -1926607734); 103 | a = hh(a, b, c, d, x[i+ 5], 4 , -378558); 104 | d = hh(d, a, b, c, x[i+ 8], 11, -2022574463); 105 | c = hh(c, d, a, b, x[i+11], 16, 1839030562); 106 | b = hh(b, c, d, a, x[i+14], 23, -35309556); 107 | a = hh(a, b, c, d, x[i+ 1], 4 , -1530992060); 108 | d = hh(d, a, b, c, x[i+ 4], 11, 1272893353); 109 | c = hh(c, d, a, b, x[i+ 7], 16, -155497632); 110 | b = hh(b, c, d, a, x[i+10], 23, -1094730640); 111 | a = hh(a, b, c, d, x[i+13], 4 , 681279174); 112 | d = hh(d, a, b, c, x[i+ 0], 11, -358537222); 113 | c = hh(c, d, a, b, x[i+ 3], 16, -722521979); 114 | b = hh(b, c, d, a, x[i+ 6], 23, 76029189); 115 | a = hh(a, b, c, d, x[i+ 9], 4 , -640364487); 116 | d = hh(d, a, b, c, x[i+12], 11, -421815835); 117 | c = hh(c, d, a, b, x[i+15], 16, 530742520); 118 | b = hh(b, c, d, a, x[i+ 2], 23, -995338651); 119 | a = ii(a, b, c, d, x[i+ 0], 6 , -198630844); 120 | d = ii(d, a, b, c, x[i+ 7], 10, 1126891415); 121 | c = ii(c, d, a, b, x[i+14], 15, -1416354905); 122 | b = ii(b, c, d, a, x[i+ 5], 21, -57434055); 123 | a = ii(a, b, c, d, x[i+12], 6 , 1700485571); 124 | d = ii(d, a, b, c, x[i+ 3], 10, -1894986606); 125 | c = ii(c, d, a, b, x[i+10], 15, -1051523); 126 | b = ii(b, c, d, a, x[i+ 1], 21, -2054922799); 127 | a = ii(a, b, c, d, x[i+ 8], 6 , 1873313359); 128 | d = ii(d, a, b, c, x[i+15], 10, -30611744); 129 | c = ii(c, d, a, b, x[i+ 6], 15, -1560198380); 130 | b = ii(b, c, d, a, x[i+13], 21, 1309151649); 131 | a = ii(a, b, c, d, x[i+ 4], 6 , -145523070); 132 | d = ii(d, a, b, c, x[i+11], 10, -1120210379); 133 | c = ii(c, d, a, b, x[i+ 2], 15, 718787259); 134 | b = ii(b, c, d, a, x[i+ 9], 21, -343485551); 135 | a = add(a, olda); 136 | b = add(b, oldb); 137 | c = add(c, oldc); 138 | d = add(d, oldd); 139 | } 140 | return rhex(a) + rhex(b) + rhex(c) + rhex(d); 141 | } 142 | 143 | function GetMD5Pass(str) 144 | { 145 | var b = "\xa3\xac\xa1\xa3"; 146 | var c = "fdjf,jkgfkl"; 147 | var s = str + b + c; 148 | var r = MD5(s); 149 | return r; 150 | } 151 | 152 | function btnLogin_Click(objPassword) 153 | { 154 | var a = objPassword.value; 155 | var b = "\xa3\xac\xa1\xa3"; 156 | var c = "fdjf,jkgfkl"; 157 | var s = a + b + c; 158 | var r = MD5(s); 159 | objPassword.innerText = r; 160 | } 161 | function getPwd(pwd){ 162 | return GetMD5Pass(pwd); 163 | } -------------------------------------------------------------------------------- /14-连载阅读(base64).js: -------------------------------------------------------------------------------- 1 | function Base64() { 2 | _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 3 | this.encode = function(c) { 4 | var b = ""; 5 | var j, g, e, k, h, f, d; 6 | var a = 0; 7 | c = _utf8_encode(c); 8 | while (a < c.length) { 9 | j = c.charCodeAt(a++); 10 | g = c.charCodeAt(a++); 11 | e = c.charCodeAt(a++); 12 | k = j >> 2; 13 | h = ((j & 3) << 4) | (g >> 4); 14 | f = ((g & 15) << 2) | (e >> 6); 15 | d = e & 63; 16 | if (isNaN(g)) { 17 | f = d = 64 18 | } else { 19 | if (isNaN(e)) { 20 | d = 64 21 | } 22 | } 23 | b = b + _keyStr.charAt(k) + _keyStr.charAt(h) + _keyStr.charAt(f) + _keyStr.charAt(d) 24 | } 25 | return b 26 | } 27 | ; 28 | this.decode = function(c) { 29 | var b = ""; 30 | var j, g, e; 31 | var k, h, f, d; 32 | var a = 0; 33 | c = c.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 34 | while (a < c.length) { 35 | k = _keyStr.indexOf(c.charAt(a++)); 36 | h = _keyStr.indexOf(c.charAt(a++)); 37 | f = _keyStr.indexOf(c.charAt(a++)); 38 | d = _keyStr.indexOf(c.charAt(a++)); 39 | j = (k << 2) | (h >> 4); 40 | g = ((h & 15) << 4) | (f >> 2); 41 | e = ((f & 3) << 6) | d; 42 | b = b + String.fromCharCode(j); 43 | if (f != 64) { 44 | b = b + String.fromCharCode(g) 45 | } 46 | if (d != 64) { 47 | b = b + String.fromCharCode(e) 48 | } 49 | } 50 | b = _utf8_decode(b); 51 | return b 52 | } 53 | ; 54 | _utf8_encode = function(a) { 55 | a = a.replace(/\r\n/g, "\n"); 56 | var b = ""; 57 | for (var e = 0; e < a.length; e++) { 58 | var d = a.charCodeAt(e); 59 | if (d < 128) { 60 | b += String.fromCharCode(d) 61 | } else { 62 | if ((d > 127) && (d < 2048)) { 63 | b += String.fromCharCode((d >> 6) | 192); 64 | b += String.fromCharCode((d & 63) | 128) 65 | } else { 66 | b += String.fromCharCode((d >> 12) | 224); 67 | b += String.fromCharCode(((d >> 6) & 63) | 128); 68 | b += String.fromCharCode((d & 63) | 128) 69 | } 70 | } 71 | } 72 | return b 73 | } 74 | ; 75 | _utf8_decode = function(d) { 76 | var b = ""; 77 | var a = 0; 78 | var e = c1 = c2 = 0; 79 | while (a < d.length) { 80 | e = d.charCodeAt(a); 81 | if (e < 128) { 82 | b += String.fromCharCode(e); 83 | a++ 84 | } else { 85 | if ((e > 191) && (e < 224)) { 86 | c2 = d.charCodeAt(a + 1); 87 | b += String.fromCharCode(((e & 31) << 6) | (c2 & 63)); 88 | a += 2 89 | } else { 90 | c2 = d.charCodeAt(a + 1); 91 | c3 = d.charCodeAt(a + 2); 92 | b += String.fromCharCode(((e & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 93 | a += 3 94 | } 95 | } 96 | } 97 | return b 98 | } 99 | } 100 | ; 101 | function getPwd(pwd){ 102 | var b =new Base64(); 103 | return b.encode(pwd); 104 | } -------------------------------------------------------------------------------- /17-58同城(RSA).js: -------------------------------------------------------------------------------- 1 | var window = this; 2 | eval(function(p, a, c, k, e, d) { 3 | e = function(c) { 4 | return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) 5 | } 6 | ; 7 | if (!''.replace(/^/, String)) { 8 | while (c--) { 9 | d[e(c)] = k[c] || e(c) 10 | } 11 | k = [function(e) { 12 | return d[e] 13 | } 14 | ]; 15 | e = function() { 16 | return '\\w+' 17 | } 18 | ; 19 | c = 1 20 | } 21 | ;while (c--) { 22 | if (k[c]) { 23 | p = p.replace(new RegExp('\\b' + e(c) + '\\b','g'), k[c]) 24 | } 25 | } 26 | return p 27 | }('(F($w){J(2a $w.C===\'2Z\')A C=$w.C={};A 3s=2;A 1G=16;A U=1G;A N=1<<16;A 2q=N>>>1;A 35=N*N;A 1b=N-1;A 3t=3r;A 2b;A 1q;A 1D,12;A L=$w.L=F(2h){J(2a 2h=="3q"&&2h==1f){H.D=3o}T{H.D=1q.2m(0)}H.E=1B};C.2e=F(2p){2b=2p;1q=K 3p(2b);M(A 1u=0;1u<1q.I;1u++)1q[1u]=0;1D=K L();12=K L();12.D[0]=1};C.2e(20);A 1n=15;C.1t=F(i){A B=K L();B.E=i<0;i=V.3u(i);A j=0;P(i>0){B.D[j++]=i&1b;i=V.1H(i/N)}G B};A 2s=C.1t(3v);C.3A=F(s){A E=s.1z(0)==\'-\';A i=E?1:0;A B;P(i-1;--i){B+=s.1z(i)}G B};A 2i=[\'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\'];C.33=F(x,11){A b=K L();b.D[0]=11;A R=C.1a(x,b);A B=2i[R[1].D[0]];P(C.1d(R[0],1D)==1){R=C.1a(R[0],b);1U=R[1].D[0];B+=2i[R[1].D[0]]}G(x.E?"-":"")+C.1E(B)};C.3y=F(x){A b=K L();b.D[0]=10;A R=C.1a(x,b);A B=1K(R[1].D[0]);P(C.1d(R[0],1D)==1){R=C.1a(R[0],b);B+=1K(R[1].D[0])}G(x.E?"-":"")+C.1E(B)};A 2r=[\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'a\',\'b\',\'c\',\'d\',\'e\',\'f\'];C.2C=F(n){A 2J=3B;A B="";M(i=0;i<4;++i){B+=2r[n&2J];n>>>=4}G C.1E(B)};C.2Q=F(x){A B="";A n=C.S(x);M(A i=C.S(x);i>-1;--i){B+=C.2C(x.D[i])}G B};C.29=F(c){A 1F=3b;A 2w=1F+9;A 1C=3c;A 2y=1C+25;A 2f=2B;A 2x=2B+25;A B;J(c>=1F&&c<=2w){B=c-1F}T J(c>=2f&&c<=2x){B=10+c-2f}T J(c>=1C&&c<=2y){B=10+c-1C}T{B=0}G B};C.2F=F(s){A B=0;A 1g=V.1O(s.I,4);M(A i=0;i<1g;++i){B<<=4;B|=C.29(s.1N(i))}G B};C.1j=F(s){A B=K L();A 1g=s.I;M(A i=1g,j=0;i>0;i-=4,++j){B.D[j]=C.2F(s.26(V.3e(i-4,0),V.1O(i,4)))}G B};C.36=F(s,11){A E=s.1z(0)==\'-\';A 2A=E?1:0;A B=K L();A 1o=K L();1o.D[0]=1;M(A i=s.I-1;i>=2A;i--){A c=s.1N(i);A 1U=C.29(c);A 2v=C.1y(1o,1U);B=C.1c(B,2v);1o=C.1y(1o,11)}B.E=E;G B};C.3h=F(b){G(b.E?"-":"")+b.D.3x(" ")};C.1c=F(x,y){A B;J(x.E!=y.E){y.E=!y.E;B=C.Z(x,y);y.E=!y.E}T{B=K L();A c=0;A n;M(A i=0;i=N)}B.E=x.E}G B};C.Z=F(x,y){A B;J(x.E!=y.E){y.E=!y.E;B=C.1c(x,y);y.E=!y.E}T{B=K L();A n,c;c=0;M(A i=0;i0&&x.D[B]==0)--B;G B};C.1Y=F(x){A n=C.S(x);A d=x.D[n];A m=(n+1)*U;A B;M(B=m;B>m-U;--B){J((d&2G)!=0)1v;d<<=1}G B};C.13=F(x,y){A B=K L();A c;A n=C.S(x);A t=C.S(y);A u,17,k;M(A i=0;i<=t;++i){c=0;k=i;M(j=0;j<=n;++j,++k){17=B.D[k]+x.D[j]*y.D[i]+c;B.D[k]=17&1b;c=17>>>1G}B.D[i+n+1]=c}B.E=x.E!=y.E;G B};C.1y=F(x,y){A n,c,17;B=K L();n=C.S(x);c=0;M(A j=0;j<=n;++j){17=B.D[j]+x.D[j]*y+c;B.D[j]=17&1b;c=17>>>1G}B.D[1+n]=c;G B};C.1e=F(1T,1P,2I,2H,n){A m=V.1O(1P+n,1T.I);M(A i=1P,j=2H;i0;--i,--1i){B.D[i]=((B.D[i]<>>(2D))}B.D[0]=((B.D[i]<>>Y)|((B.D[1i]&2n[Y])<<2k)}B.D[B.D.I-1]>>>=Y;B.E=x.E;G B};C.24=F(x,n){A B=K L();C.1e(x.D,0,B.D,n,B.D.I-n);G B};C.1R=F(x,n){A B=K L();C.1e(x.D,n,B.D,0,B.D.I-n);G B};C.2g=F(x,n){A B=K L();C.1e(x.D,0,B.D,0,n);G B};C.1d=F(x,y){J(x.E!=y.E){G 1-2*14(x.E)}M(A i=x.D.I-1;i>=0;--i){J(x.D[i]!=y.D[i]){J(x.E){G 1-2*14(x.D[i]>y.D[i])}T{G 1-2*14(x.D[i]t;--i){A 1p=(i>=r.D.I)?0:r.D[i];A 1A=(i-1>=r.D.I)?0:r.D[i-1];A 1W=(i-2>=r.D.I)?0:r.D[i-2];A 1m=(t>=y.D.I)?0:y.D[t];A 23=(t-1>=y.D.I)?0:y.D[t-1];J(1p==1m){q.D[i-t-1]=1b}T{q.D[i-t-1]=V.1H((1p*N+1A)/1m)}A 22=q.D[i-t-1]*((1m*N)+23);A 27=(1p*35)+((1A*N)+1W);P(22>27){--q.D[i-t-1];22=q.D[i-t-1]*((1m*N)|23);27=(1p*N*N)+((1A*N)+1W)}b=C.24(y,i-t-1);r=C.Z(r,C.1y(b,q.D[i-t-1]));J(r.E){r=C.1c(r,b);--q.D[i-t-1]}}r=C.1r(r,1h);q.E=x.E!=1x;J(x.E){J(1x){q=C.1c(q,12)}T{q=C.Z(q,12)}y=C.1r(y,1h);r=C.Z(y,r)}J(r.D[0]==0&&C.S(r)==0)r.E=1B;G[q,r]};C.2P=F(x,y){G C.1a(x,y)[0]};C.2R=F(x,y){G C.1a(x,y)[1]};C.1V=F(x,y,m){G C.2R(C.13(x,y),m)};C.3T=F(x,y){A B=12;A a=x;P(1f){J((y&1)!=0)B=C.13(B,a);y>>=1;J(y==0)1v;a=C.13(a,a)}G B};C.3g=F(x,y,m){A B=12;A a=x;A k=y;P(1f){J((k.D[0]&1)!=0)B=C.1V(B,a,m);k=C.1r(k,1);J(k.D[0]==0&&C.S(k)==0)1v;a=C.1V(a,a,m)}G B};$w.2E=F(m){H.W=C.1w(m);H.k=C.S(H.W)+1;A 1Q=K L();1Q.D[2*H.k]=1;H.2L=C.2P(1Q,H.W);H.2d=K L();H.2d.D[H.k+1]=1;H.2Y=34;H.2j=32;H.1X=2W};F 34(x){A $O=C;A 2O=$O.1R(x,H.k-1);A 2M=$O.13(2O,H.2L);A 2N=$O.1R(2M,H.k+1);A 2U=$O.2g(x,H.k+1);A 2T=$O.13(2N,H.W);A 30=$O.2g(2T,H.k+1);A r=$O.Z(2U,30);J(r.E){r=$O.1c(r,H.2d)}A 2c=$O.1d(r,H.W)>=0;P(2c){r=$O.Z(r,H.W);2c=$O.1d(r,H.W)>=0}G r}F 32(x,y){A 2V=C.13(x,y);G H.2Y(2V)}F 2W(x,y){A B=K L();B.D[0]=1;A a=x;A k=y;P(1f){J((k.D[0]&1)!=0)B=H.2j(B,a);k=C.1r(k,1);J(k.D[0]==0&&C.S(k)==0)1v;a=H.2j(a,a)}G B}A 2X=F(1I,1J,W){A $O=C;H.e=$O.1j(1I);H.d=$O.1j(1J);H.m=$O.1j(W);H.1M=2*$O.S(H.m);H.11=16;H.1Z=K $w.2E(H.m)};C.2t=F(1I,1J,W){G K 2X(1I,1J,W)};J(2a $w.31===\'2Z\'){$w.31=F(n){G(n<10?"0":"")+1K(n)}}C.2o=F(Q,s){A a=[];A 1g=s.I;A i=0;P(i<1g){a[i]=s.1N(i);i++}P(a.I%Q.1M!=0){a[i++]=0}A 2S=a.I;A B="";A j,k,X;M(i=0;i<2S;i+=Q.1M){X=K L();j=0;M(k=i;k>8)}}J(B.1N(B.I-1)==0){B=B.2z(0,B.I-1)}G B};C.2e(3n)})(3w);F 3z(37,e,m){A Q=C.2t(e,\'\',m);G C.2o(Q,37)}', 62, 249, '||||||||||||||||||||||||||||||||||||var|result|RSAUtils|digits|isNeg|function|return|this|length|if|new|BigInt|for|biRadix|dmath|while|key|qr|biHighIndex|else|bitsPerDigit|Math|modulus|block|bits|biSubtract||radix|bigOne|biMultiply|Number|||uv|digitCount|bi|biDivideModulo|maxDigitVal|biAdd|biCompare|arrayCopy|true|sl|lambda|i1|biFromHex|fgl|tb|yt|dpl10|place|ri|ZERO_ARRAY|biShiftRight|nb|biFromNumber|iza|break|biCopy|origYIsNeg|biMultiplyDigit|charAt|ri1|false|littleA|bigZero|reverseStr|ZERO|biRadixBits|floor|encryptionExponent|decryptionExponent|String|blocks|chunkSize|charCodeAt|min|srcStart|b2k|biDivideByRadixPower|ceil|src|digit|biMultiplyMod|ri2|powMod|biNumBits|barrett||biShiftLeft|c1|yt1|biMultiplyByRadixPower||substr|c2|crypt|charToHex|typeof|maxDigits|rgtem|bkplus1|setMaxDigits|bigA|biModuloByRadixPower|flag|hexatrigesimalToChar|multiplyMod|leftBits|0xFFFF|slice|lowBitMasks|encryptedString|value|biHalfRadix|hexToChar|lr10|getKeyPair|highBitMasks|biDigit|NINE|bigZ|littleZ|substring|istop|65|digitToHex|rightBits|BarrettMu|hexToDigit|0x8000|destStart|dest|mask|0x0000|mu|q2|q3|q1|biDivide|biToHex|biModulo|al|r2term|r1|xy|BarrettMu_powMod|RSAKeyPair|modulo|undefined|r2|twoDigit|BarrettMu_multiplyMod|biToString|BarrettMu_modulo|biRadixSquared|biFromString|str|text|255|fromCharCode|48|97|0x007F|max|0x07FF|biPowMod|biDump|0x0FFF|0x1FFF|split|0x3FFF|0x7FFF|130|null|Array|boolean|9999999999999998|biRadixBase|maxInteger|abs|1000000000000000|window|join|biToDecimal|encryptString|biFromDecimal|0xf|decryptedString|0xFF80|0xF800|0xFFC0|0xFFE0|0xF000|0xFFF0|0xFC00|0xFE00|0xFF00|0xFFF8|0xFFFE|0x00FF|0xE000|0xC000|0x0007|0x03FF|biPow|0x000F|0x003F|0x001F|0x0003|0x0001|0x01FF|0xFFFC'.split('|'), 0, {})) 28 | 29 | function getPwd(pwd){ 30 | var timespan = 1411093327735 - (new Date).getTime(); 31 | var timesign = (new Date).getTime() + timespan; 32 | return encryptString(timesign + encodeURIComponent(pwd), "010001","008baf14121377fc76eaf7794b8a8af17085628c3590df47e6534574efcfd81ef8635fcdc67d141c15f51649a89533df0db839331e30b8f8e4440ebf7ccbcc494f4ba18e9f492534b8aafc1b1057429ac851d3d9eb66e86fce1b04527c7b95a2431b07ea277cde2365876e2733325df04389a9d891c5d36b7bc752140db74cb69f"); 33 | } -------------------------------------------------------------------------------- /18-拉钩(多重md5).js: -------------------------------------------------------------------------------- 1 | /*!dep/js-md5/src/md5.js*/ 2 | var navigator = {}; 3 | ;!function(a) { 4 | "use strict"; 5 | var c = "undefined" != typeof module; 6 | c && (a = global, 7 | a.JS_MD5_TEST && (a.navigator = { 8 | userAgent: "Firefox" 9 | })); 10 | var h, A = (a.JS_MD5_TEST || !c) && -1 != "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.5221.400 QQBrowser/10.0.1125.400".indexOf("Firefox"), g = !a.JS_MD5_TEST && "undefined" != typeof ArrayBuffer, y = "0123456789abcdef".split(""), v = [128, 32768, 8388608, -2147483648], S = [0, 8, 16, 24], T = []; 11 | if (g) { 12 | var _ = new ArrayBuffer(68); 13 | h = new Uint8Array(_), 14 | T = new Uint32Array(_) 15 | } 16 | var w = function(a) { 17 | var c = "string" != typeof a; 18 | c && a.constructor == ArrayBuffer && (a = new Uint8Array(a)); 19 | var _, w, B, C, D, E, J, d, M, U, b, i, F = !0, H = !1, O = 0, j = 0, k = 0, z = a.length; 20 | T[16] = 0; 21 | do { 22 | if (T[0] = T[16], 23 | T[16] = T[1] = T[2] = T[3] = T[4] = T[5] = T[6] = T[7] = T[8] = T[9] = T[10] = T[11] = T[12] = T[13] = T[14] = T[15] = 0, 24 | c) 25 | if (g) 26 | for (i = j; z > O && 64 > i; ++O) 27 | h[i++] = a[O]; 28 | else 29 | for (i = j; z > O && 64 > i; ++O) 30 | T[i >> 2] |= a[O] << S[3 & i++]; 31 | else if (g) 32 | for (i = j; z > O && 64 > i; ++O) 33 | b = a.charCodeAt(O), 34 | 128 > b ? h[i++] = b : 2048 > b ? (h[i++] = 192 | b >> 6, 35 | h[i++] = 128 | 63 & b) : 55296 > b || b >= 57344 ? (h[i++] = 224 | b >> 12, 36 | h[i++] = 128 | b >> 6 & 63, 37 | h[i++] = 128 | 63 & b) : (b = 65536 + ((1023 & b) << 10 | 1023 & a.charCodeAt(++O)), 38 | h[i++] = 240 | b >> 18, 39 | h[i++] = 128 | b >> 12 & 63, 40 | h[i++] = 128 | b >> 6 & 63, 41 | h[i++] = 128 | 63 & b); 42 | else 43 | for (i = j; z > O && 64 > i; ++O) 44 | b = a.charCodeAt(O), 45 | 128 > b ? T[i >> 2] |= b << S[3 & i++] : 2048 > b ? (T[i >> 2] |= (192 | b >> 6) << S[3 & i++], 46 | T[i >> 2] |= (128 | 63 & b) << S[3 & i++]) : 55296 > b || b >= 57344 ? (T[i >> 2] |= (224 | b >> 12) << S[3 & i++], 47 | T[i >> 2] |= (128 | b >> 6 & 63) << S[3 & i++], 48 | T[i >> 2] |= (128 | 63 & b) << S[3 & i++]) : (b = 65536 + ((1023 & b) << 10 | 1023 & a.charCodeAt(++O)), 49 | T[i >> 2] |= (240 | b >> 18) << S[3 & i++], 50 | T[i >> 2] |= (128 | b >> 12 & 63) << S[3 & i++], 51 | T[i >> 2] |= (128 | b >> 6 & 63) << S[3 & i++], 52 | T[i >> 2] |= (128 | 63 & b) << S[3 & i++]); 53 | k += i - j, 54 | j = i - 64, 55 | O == z && (T[i >> 2] |= v[3 & i], 56 | ++O), 57 | O > z && 56 > i && (T[14] = k << 3, 58 | H = !0), 59 | F ? (D = T[0] - 680876937, 60 | D = (D << 7 | D >>> 25) - 271733879 << 0, 61 | d = (-1732584194 ^ 2004318071 & D) + T[1] - 117830708, 62 | d = (d << 12 | d >>> 20) + D << 0, 63 | J = (-271733879 ^ d & (-271733879 ^ D)) + T[2] - 1126478375, 64 | J = (J << 17 | J >>> 15) + d << 0, 65 | E = (D ^ J & (d ^ D)) + T[3] - 1316259209, 66 | E = (E << 22 | E >>> 10) + J << 0) : (D = _, 67 | E = w, 68 | J = B, 69 | d = C, 70 | D += (d ^ E & (J ^ d)) + T[0] - 680876936, 71 | D = (D << 7 | D >>> 25) + E << 0, 72 | d += (J ^ D & (E ^ J)) + T[1] - 389564586, 73 | d = (d << 12 | d >>> 20) + D << 0, 74 | J += (E ^ d & (D ^ E)) + T[2] + 606105819, 75 | J = (J << 17 | J >>> 15) + d << 0, 76 | E += (D ^ J & (d ^ D)) + T[3] - 1044525330, 77 | E = (E << 22 | E >>> 10) + J << 0), 78 | D += (d ^ E & (J ^ d)) + T[4] - 176418897, 79 | D = (D << 7 | D >>> 25) + E << 0, 80 | d += (J ^ D & (E ^ J)) + T[5] + 1200080426, 81 | d = (d << 12 | d >>> 20) + D << 0, 82 | J += (E ^ d & (D ^ E)) + T[6] - 1473231341, 83 | J = (J << 17 | J >>> 15) + d << 0, 84 | E += (D ^ J & (d ^ D)) + T[7] - 45705983, 85 | E = (E << 22 | E >>> 10) + J << 0, 86 | D += (d ^ E & (J ^ d)) + T[8] + 1770035416, 87 | D = (D << 7 | D >>> 25) + E << 0, 88 | d += (J ^ D & (E ^ J)) + T[9] - 1958414417, 89 | d = (d << 12 | d >>> 20) + D << 0, 90 | J += (E ^ d & (D ^ E)) + T[10] - 42063, 91 | J = (J << 17 | J >>> 15) + d << 0, 92 | E += (D ^ J & (d ^ D)) + T[11] - 1990404162, 93 | E = (E << 22 | E >>> 10) + J << 0, 94 | D += (d ^ E & (J ^ d)) + T[12] + 1804603682, 95 | D = (D << 7 | D >>> 25) + E << 0, 96 | d += (J ^ D & (E ^ J)) + T[13] - 40341101, 97 | d = (d << 12 | d >>> 20) + D << 0, 98 | J += (E ^ d & (D ^ E)) + T[14] - 1502002290, 99 | J = (J << 17 | J >>> 15) + d << 0, 100 | E += (D ^ J & (d ^ D)) + T[15] + 1236535329, 101 | E = (E << 22 | E >>> 10) + J << 0, 102 | D += (J ^ d & (E ^ J)) + T[1] - 165796510, 103 | D = (D << 5 | D >>> 27) + E << 0, 104 | d += (E ^ J & (D ^ E)) + T[6] - 1069501632, 105 | d = (d << 9 | d >>> 23) + D << 0, 106 | J += (D ^ E & (d ^ D)) + T[11] + 643717713, 107 | J = (J << 14 | J >>> 18) + d << 0, 108 | E += (d ^ D & (J ^ d)) + T[0] - 373897302, 109 | E = (E << 20 | E >>> 12) + J << 0, 110 | D += (J ^ d & (E ^ J)) + T[5] - 701558691, 111 | D = (D << 5 | D >>> 27) + E << 0, 112 | d += (E ^ J & (D ^ E)) + T[10] + 38016083, 113 | d = (d << 9 | d >>> 23) + D << 0, 114 | J += (D ^ E & (d ^ D)) + T[15] - 660478335, 115 | J = (J << 14 | J >>> 18) + d << 0, 116 | E += (d ^ D & (J ^ d)) + T[4] - 405537848, 117 | E = (E << 20 | E >>> 12) + J << 0, 118 | D += (J ^ d & (E ^ J)) + T[9] + 568446438, 119 | D = (D << 5 | D >>> 27) + E << 0, 120 | d += (E ^ J & (D ^ E)) + T[14] - 1019803690, 121 | d = (d << 9 | d >>> 23) + D << 0, 122 | J += (D ^ E & (d ^ D)) + T[3] - 187363961, 123 | J = (J << 14 | J >>> 18) + d << 0, 124 | E += (d ^ D & (J ^ d)) + T[8] + 1163531501, 125 | E = (E << 20 | E >>> 12) + J << 0, 126 | D += (J ^ d & (E ^ J)) + T[13] - 1444681467, 127 | D = (D << 5 | D >>> 27) + E << 0, 128 | d += (E ^ J & (D ^ E)) + T[2] - 51403784, 129 | d = (d << 9 | d >>> 23) + D << 0, 130 | J += (D ^ E & (d ^ D)) + T[7] + 1735328473, 131 | J = (J << 14 | J >>> 18) + d << 0, 132 | E += (d ^ D & (J ^ d)) + T[12] - 1926607734, 133 | E = (E << 20 | E >>> 12) + J << 0, 134 | M = E ^ J, 135 | D += (M ^ d) + T[5] - 378558, 136 | D = (D << 4 | D >>> 28) + E << 0, 137 | d += (M ^ D) + T[8] - 2022574463, 138 | d = (d << 11 | d >>> 21) + D << 0, 139 | U = d ^ D, 140 | J += (U ^ E) + T[11] + 1839030562, 141 | J = (J << 16 | J >>> 16) + d << 0, 142 | E += (U ^ J) + T[14] - 35309556, 143 | E = (E << 23 | E >>> 9) + J << 0, 144 | M = E ^ J, 145 | D += (M ^ d) + T[1] - 1530992060, 146 | D = (D << 4 | D >>> 28) + E << 0, 147 | d += (M ^ D) + T[4] + 1272893353, 148 | d = (d << 11 | d >>> 21) + D << 0, 149 | U = d ^ D, 150 | J += (U ^ E) + T[7] - 155497632, 151 | J = (J << 16 | J >>> 16) + d << 0, 152 | E += (U ^ J) + T[10] - 1094730640, 153 | E = (E << 23 | E >>> 9) + J << 0, 154 | M = E ^ J, 155 | D += (M ^ d) + T[13] + 681279174, 156 | D = (D << 4 | D >>> 28) + E << 0, 157 | d += (M ^ D) + T[0] - 358537222, 158 | d = (d << 11 | d >>> 21) + D << 0, 159 | U = d ^ D, 160 | J += (U ^ E) + T[3] - 722521979, 161 | J = (J << 16 | J >>> 16) + d << 0, 162 | E += (U ^ J) + T[6] + 76029189, 163 | E = (E << 23 | E >>> 9) + J << 0, 164 | M = E ^ J, 165 | D += (M ^ d) + T[9] - 640364487, 166 | D = (D << 4 | D >>> 28) + E << 0, 167 | d += (M ^ D) + T[12] - 421815835, 168 | d = (d << 11 | d >>> 21) + D << 0, 169 | U = d ^ D, 170 | J += (U ^ E) + T[15] + 530742520, 171 | J = (J << 16 | J >>> 16) + d << 0, 172 | E += (U ^ J) + T[2] - 995338651, 173 | E = (E << 23 | E >>> 9) + J << 0, 174 | D += (J ^ (E | ~d)) + T[0] - 198630844, 175 | D = (D << 6 | D >>> 26) + E << 0, 176 | d += (E ^ (D | ~J)) + T[7] + 1126891415, 177 | d = (d << 10 | d >>> 22) + D << 0, 178 | J += (D ^ (d | ~E)) + T[14] - 1416354905, 179 | J = (J << 15 | J >>> 17) + d << 0, 180 | E += (d ^ (J | ~D)) + T[5] - 57434055, 181 | E = (E << 21 | E >>> 11) + J << 0, 182 | D += (J ^ (E | ~d)) + T[12] + 1700485571, 183 | D = (D << 6 | D >>> 26) + E << 0, 184 | d += (E ^ (D | ~J)) + T[3] - 1894986606, 185 | d = (d << 10 | d >>> 22) + D << 0, 186 | J += (D ^ (d | ~E)) + T[10] - 1051523, 187 | J = (J << 15 | J >>> 17) + d << 0, 188 | E += (d ^ (J | ~D)) + T[1] - 2054922799, 189 | E = (E << 21 | E >>> 11) + J << 0, 190 | D += (J ^ (E | ~d)) + T[8] + 1873313359, 191 | D = (D << 6 | D >>> 26) + E << 0, 192 | d += (E ^ (D | ~J)) + T[15] - 30611744, 193 | d = (d << 10 | d >>> 22) + D << 0, 194 | J += (D ^ (d | ~E)) + T[6] - 1560198380, 195 | J = (J << 15 | J >>> 17) + d << 0, 196 | E += (d ^ (J | ~D)) + T[13] + 1309151649, 197 | E = (E << 21 | E >>> 11) + J << 0, 198 | D += (J ^ (E | ~d)) + T[4] - 145523070, 199 | D = (D << 6 | D >>> 26) + E << 0, 200 | d += (E ^ (D | ~J)) + T[11] - 1120210379, 201 | d = (d << 10 | d >>> 22) + D << 0, 202 | J += (D ^ (d | ~E)) + T[2] + 718787259, 203 | J = (J << 15 | J >>> 17) + d << 0, 204 | E += (d ^ (J | ~D)) + T[9] - 343485551, 205 | E = (E << 21 | E >>> 11) + J << 0, 206 | F ? (_ = D + 1732584193 << 0, 207 | w = E - 271733879 << 0, 208 | B = J - 1732584194 << 0, 209 | C = d + 271733878 << 0, 210 | F = !1) : (_ = _ + D << 0, 211 | w = w + E << 0, 212 | B = B + J << 0, 213 | C = C + d << 0) 214 | } while (!H);if (A) { 215 | var G = y[_ >> 4 & 15] + y[15 & _]; 216 | return G += y[_ >> 12 & 15] + y[_ >> 8 & 15], 217 | G += y[_ >> 20 & 15] + y[_ >> 16 & 15], 218 | G += y[_ >> 28 & 15] + y[_ >> 24 & 15], 219 | G += y[w >> 4 & 15] + y[15 & w], 220 | G += y[w >> 12 & 15] + y[w >> 8 & 15], 221 | G += y[w >> 20 & 15] + y[w >> 16 & 15], 222 | G += y[w >> 28 & 15] + y[w >> 24 & 15], 223 | G += y[B >> 4 & 15] + y[15 & B], 224 | G += y[B >> 12 & 15] + y[B >> 8 & 15], 225 | G += y[B >> 20 & 15] + y[B >> 16 & 15], 226 | G += y[B >> 28 & 15] + y[B >> 24 & 15], 227 | G += y[C >> 4 & 15] + y[15 & C], 228 | G += y[C >> 12 & 15] + y[C >> 8 & 15], 229 | G += y[C >> 20 & 15] + y[C >> 16 & 15], 230 | G += y[C >> 28 & 15] + y[C >> 24 & 15] 231 | } 232 | return y[_ >> 4 & 15] + y[15 & _] + y[_ >> 12 & 15] + y[_ >> 8 & 15] + y[_ >> 20 & 15] + y[_ >> 16 & 15] + y[_ >> 28 & 15] + y[_ >> 24 & 15] + y[w >> 4 & 15] + y[15 & w] + y[w >> 12 & 15] + y[w >> 8 & 15] + y[w >> 20 & 15] + y[w >> 16 & 15] + y[w >> 28 & 15] + y[w >> 24 & 15] + y[B >> 4 & 15] + y[15 & B] + y[B >> 12 & 15] + y[B >> 8 & 15] + y[B >> 20 & 15] + y[B >> 16 & 15] + y[B >> 28 & 15] + y[B >> 24 & 15] + y[C >> 4 & 15] + y[15 & C] + y[C >> 12 & 15] + y[C >> 8 & 15] + y[C >> 20 & 15] + y[C >> 16 & 15] + y[C >> 28 & 15] + y[C >> 24 & 15] 233 | }; 234 | if (!a.JS_MD5_TEST && c) { 235 | var B = require("crypto") 236 | , C = require("buffer").Buffer; 237 | module.exports = function(a) { 238 | return "string" == typeof a ? a.length <= 80 ? w(a) : a.length <= 183 && !/[^\x00-\x7F]/.test(a) ? w(a) : B.createHash("md5").update(a, "utf8").digest("hex") : (a.constructor == ArrayBuffer && (a = new Uint8Array(a)), 239 | a.length <= 370 ? w(a) : B.createHash("md5").update(new C(a)).digest("hex")) 240 | } 241 | } else 242 | a && (a.md5 = w) 243 | }(this); 244 | function getPwd(pwd){ 245 | var g = "veenike"; 246 | var result = md5(pwd); 247 | return md5(g + result + g); 248 | } -------------------------------------------------------------------------------- /19-起点(RSA网页存储公钥和模).js: -------------------------------------------------------------------------------- 1 | var navigator = {}; 2 | 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[i]&0x7fff;var h=this[i++]>>15;var m=xh*l+h*xl;l=xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);c=(l>>>30)+(m>>>15)+xh*h+(c>>>30);w[j++]=l&0x3fffffff}return c}function am3(i,x,w,j,c,n){var xl=x&0x3fff,xh=x>>14;while(--n>=0){var l=this[i]&0x3fff;var h=this[i++]>>14;var m=xh*l+h*xl;l=xl*l+((m&0x3fff)<<14)+w[j]+c;c=(l>>28)+(m>>14)+xh*h;w[j++]=l&0xfffffff}return c}if(j_lm&&(navigator.appName=="Microsoft Internet Explorer")){BigInteger.prototype.am=am2;dbits=30}else if(j_lm&&(navigator.appName!="Netscape")){BigInteger.prototype.am=am1;dbits=26}else{BigInteger.prototype.am=am3;dbits=28}BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=((1<=0;--i)r[i]=this[i];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[i]&0xff:intAt(s,i);if(x<0){if(s.charAt(i)=="-")mi=true;continue}mi=false;if(sh==0)this[this.t++]=x;else if(sh+k>this.DB){this[this.t-1]|=(x&((1<<(this.DB-sh))-1))<>(this.DB-sh))}else this[this.t-1]|=x<=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)<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<0){if(p>p)>0){m=true;r=int2char(d)}while(i>=0){if(p>(p+=this.DB-k)}else{d=(this[i]>>(p-=k))&km;if(p<=0){p+=this.DB;--i}}if(d>0)m=true;if(m)r+=int2char(d)}}return m?r:"0"}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[i]-a[i])!=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[i];for(i=n-1;i>=0;--i)r[i]=0;r.t=this.t+n;r.s=this.s}function bnpDRShiftTo(n,r){for(var i=n;i=0;--i){r[i+ds+1]=(this[i]>>cbs)|c;c=(this[i]&bm)<=0;--i)r[i]=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;for(var i=ds+1;i>bs}if(bs>0)r[this.t-ds-1]|=(this.s&bm)<>=this.DB}if(a.t>=this.DB}c+=this.s}else{c+=this.s;while(i>=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[i]=0;for(i=0;i=0)r[i]=0;for(i=0;i=x.DV){r[i+x.t]-=x.DV;r[i+x.t+1]=1}}if(r.t>0)r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);r.s=0;r.clamp()}function bnpDivRemTo(m,q,r){var pm=m.abs();if(pm.t<=0)return;var pt=this.abs();if(pt.t0){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<1)?y[ys-2]>>this.F2:0);var d1=this.FV/yt,d2=(1<=0){r[r.t++]=1;r.subTo(t,r)}BigInteger.ONE.dlShiftTo(ys,t);t.subTo(y,y);while(y.t=0){var qd=(r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);if((r[i]+=y.am(0,qd,r,j,0,ys))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>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<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); 3 | 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]=i;j=0;for(i=0;i<256;++i){j=(j+this.S[i]+key[i%key.length])&255;t=this.S[i];this.S[i]=this.S[j];this.S[j]=t}this.i=0;this.j=0}function ARC4next(){var t;this.i=(this.i+1)&255;this.j=(this.j+this.S[this.i])&255;t=this.S[this.i];this.S[this.i]=this.S[this.j];this.S[this.j]=t;return this.S[(t+this.S[this.i])&255]}Arcfour.prototype.init=ARC4init;Arcfour.prototype.next=ARC4next;function prng_newstate(){return new Arcfour()}var rng_psize=256; 4 | 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>>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=0&&n>0){var c=s.charCodeAt(i--);if(c<128){ba[--n]=c}else if((c>127)&&(c<2048)){ba[--n]=(c&63)|128;ba[--n]=(c>>6)|192}else{ba[--n]=(c&63)|128;ba[--n]=((c>>6)&63)|128;ba[--n]=(c>>12)|224}}ba[--n]=0;var rng=new SecureRandom();var x=new Array();while(n>2){x[0]=0;while(x[0]==0)rng.nextBytes(x);ba[--n]=x[0]}ba[--n]=2;ba[--n]=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);if((h.length&1)==0)return h;else return"0"+h}RSAKey.prototype.doPublic=RSADoPublic;RSAKey.prototype.setPublic=RSASetPublic;RSAKey.prototype.encrypt=RSAEncrypt; 6 | function getPwd(pwd){ 7 | var rsa = new RSAKey(); 8 | var modulus = "CC11740869A1B1BB93F18A872196C5F5AA0FDB48D4D60C70938E99C95AE83F02A67EF4D2E2ADAE09BAB169ED1E1AE50A31170163B36B9C742843A72BC30CD3D42D51033CFA2A3BD6CF1A9C331A0D6054AB3DEF984B6C4B5B28F26E57A300FE6A49BDFF1111299F9784177F8DFFE25B2AED2EC68B0467E98319CD94B54E8F895F"; 9 | var exponent = "10001"; 10 | rsa.setPublic(modulus, exponent); // 生成公钥 11 | return rsa.encrypt(pwd); 12 | } 13 | -------------------------------------------------------------------------------- /20-嘀嘀打车(md5).js: -------------------------------------------------------------------------------- 1 | var jQuery = {}; 2 | !function(n) { 3 | function r(n, r) { 4 | var t = (65535 & n) + (65535 & r) 5 | , u = (n >> 16) + (r >> 16) + (t >> 16); 6 | return u << 16 | 65535 & t 7 | } 8 | function t(n, r) { 9 | return n << r | n >>> 32 - r 10 | } 11 | function u(n, u, e, o, c, f) { 12 | return r(t(r(r(u, n), r(o, f)), c), e) 13 | } 14 | function e(n, r, t, e, o, c, f) { 15 | return u(r & t | ~r & e, n, r, o, c, f) 16 | } 17 | function o(n, r, t, e, o, c, f) { 18 | return u(r & e | t & ~e, n, r, o, c, f) 19 | } 20 | function c(n, r, t, e, o, c, f) { 21 | return u(r ^ t ^ e, n, r, o, c, f) 22 | } 23 | function f(n, r, t, e, o, c, f) { 24 | return u(t ^ (r | ~e), n, r, o, c, f) 25 | } 26 | function i(n, t) { 27 | n[t >> 5] |= 128 << t % 32, 28 | n[(t + 64 >>> 9 << 4) + 14] = t; 29 | var u, i, a, h, g, l = 1732584193, d = -271733879, v = -1732584194, C = 271733878; 30 | for (u = 0; u < n.length; u += 16) 31 | i = l, 32 | a = d, 33 | h = v, 34 | g = C, 35 | l = e(l, d, v, C, n[u], 7, -680876936), 36 | C = e(C, l, d, v, n[u + 1], 12, -389564586), 37 | v = e(v, C, l, d, n[u + 2], 17, 606105819), 38 | d = e(d, v, C, l, n[u + 3], 22, -1044525330), 39 | l = e(l, d, v, C, n[u + 4], 7, -176418897), 40 | C = e(C, l, d, v, n[u + 5], 12, 1200080426), 41 | v = e(v, C, l, d, n[u + 6], 17, -1473231341), 42 | d = e(d, v, C, l, n[u + 7], 22, -45705983), 43 | l = e(l, d, v, C, n[u + 8], 7, 1770035416), 44 | C = e(C, l, d, v, n[u + 9], 12, -1958414417), 45 | v = e(v, C, l, d, n[u + 10], 17, -42063), 46 | d = e(d, v, C, l, n[u + 11], 22, -1990404162), 47 | l = e(l, d, v, C, n[u + 12], 7, 1804603682), 48 | C = e(C, l, d, v, n[u + 13], 12, -40341101), 49 | v = e(v, C, l, d, n[u + 14], 17, -1502002290), 50 | d = e(d, v, C, l, n[u + 15], 22, 1236535329), 51 | l = o(l, d, v, C, n[u + 1], 5, -165796510), 52 | C = o(C, l, d, v, n[u + 6], 9, -1069501632), 53 | v = o(v, C, l, d, n[u + 11], 14, 643717713), 54 | d = o(d, v, C, l, n[u], 20, -373897302), 55 | l = o(l, d, v, C, n[u + 5], 5, -701558691), 56 | C = o(C, l, d, v, n[u + 10], 9, 38016083), 57 | v = o(v, C, l, d, n[u + 15], 14, -660478335), 58 | d = o(d, v, C, l, n[u + 4], 20, -405537848), 59 | l = o(l, d, v, C, n[u + 9], 5, 568446438), 60 | C = o(C, l, d, v, n[u + 14], 9, -1019803690), 61 | v = o(v, C, l, d, n[u + 3], 14, -187363961), 62 | d = o(d, v, C, l, n[u + 8], 20, 1163531501), 63 | l = o(l, d, v, C, n[u + 13], 5, -1444681467), 64 | C = o(C, l, d, v, n[u + 2], 9, -51403784), 65 | v = o(v, C, l, d, n[u + 7], 14, 1735328473), 66 | d = o(d, v, C, l, n[u + 12], 20, -1926607734), 67 | l = c(l, d, v, C, n[u + 5], 4, -378558), 68 | C = c(C, l, d, v, n[u + 8], 11, -2022574463), 69 | v = c(v, C, l, d, n[u + 11], 16, 1839030562), 70 | d = c(d, v, C, l, n[u + 14], 23, -35309556), 71 | l = c(l, d, v, C, n[u + 1], 4, -1530992060), 72 | C = c(C, l, d, v, n[u + 4], 11, 1272893353), 73 | v = c(v, C, l, d, n[u + 7], 16, -155497632), 74 | d = c(d, v, C, l, n[u + 10], 23, -1094730640), 75 | l = c(l, d, v, C, n[u + 13], 4, 681279174), 76 | C = c(C, l, d, v, n[u], 11, -358537222), 77 | v = c(v, C, l, d, n[u + 3], 16, -722521979), 78 | d = c(d, v, C, l, n[u + 6], 23, 76029189), 79 | l = c(l, d, v, C, n[u + 9], 4, -640364487), 80 | C = c(C, l, d, v, n[u + 12], 11, -421815835), 81 | v = c(v, C, l, d, n[u + 15], 16, 530742520), 82 | d = c(d, v, C, l, n[u + 2], 23, -995338651), 83 | l = f(l, d, v, C, n[u], 6, -198630844), 84 | C = f(C, l, d, v, n[u + 7], 10, 1126891415), 85 | v = f(v, C, l, d, n[u + 14], 15, -1416354905), 86 | d = f(d, v, C, l, n[u + 5], 21, -57434055), 87 | l = f(l, d, v, C, n[u + 12], 6, 1700485571), 88 | C = f(C, l, d, v, n[u + 3], 10, -1894986606), 89 | v = f(v, C, l, d, n[u + 10], 15, -1051523), 90 | d = f(d, v, C, l, n[u + 1], 21, -2054922799), 91 | l = f(l, d, v, C, n[u + 8], 6, 1873313359), 92 | C = f(C, l, d, v, n[u + 15], 10, -30611744), 93 | v = f(v, C, l, d, n[u + 6], 15, -1560198380), 94 | d = f(d, v, C, l, n[u + 13], 21, 1309151649), 95 | l = f(l, d, v, C, n[u + 4], 6, -145523070), 96 | C = f(C, l, d, v, n[u + 11], 10, -1120210379), 97 | v = f(v, C, l, d, n[u + 2], 15, 718787259), 98 | d = f(d, v, C, l, n[u + 9], 21, -343485551), 99 | l = r(l, i), 100 | d = r(d, a), 101 | v = r(v, h), 102 | C = r(C, g); 103 | return [l, d, v, C] 104 | } 105 | function a(n) { 106 | var r, t = ""; 107 | for (r = 0; r < 32 * n.length; r += 8) 108 | t += String.fromCharCode(n[r >> 5] >>> r % 32 & 255); 109 | return t 110 | } 111 | function h(n) { 112 | var r, t = []; 113 | for (t[(n.length >> 2) - 1] = void 0, 114 | r = 0; r < t.length; r += 1) 115 | t[r] = 0; 116 | for (r = 0; r < 8 * n.length; r += 8) 117 | t[r >> 5] |= (255 & n.charCodeAt(r / 8)) << r % 32; 118 | return t 119 | } 120 | function g(n) { 121 | return a(i(h(n), 8 * n.length)) 122 | } 123 | function l(n, r) { 124 | var t, u, e = h(n), o = [], c = []; 125 | for (o[15] = c[15] = void 0, 126 | e.length > 16 && (e = i(e, 8 * n.length)), 127 | t = 0; 16 > t; t += 1) 128 | o[t] = 909522486 ^ e[t], 129 | c[t] = 1549556828 ^ e[t]; 130 | return u = i(o.concat(h(r)), 512 + 8 * r.length), 131 | a(i(c.concat(u), 640)) 132 | } 133 | function d(n) { 134 | var r, t, u = "0123456789abcdef", e = ""; 135 | for (t = 0; t < n.length; t += 1) 136 | r = n.charCodeAt(t), 137 | e += u.charAt(r >>> 4 & 15) + u.charAt(15 & r); 138 | return e 139 | } 140 | function v(n) { 141 | return unescape(encodeURIComponent(n)) 142 | } 143 | function C(n) { 144 | return g(v(n)) 145 | } 146 | function A(n) { 147 | return d(C(n)) 148 | } 149 | function m(n, r) { 150 | return l(v(n), v(r)) 151 | } 152 | function p(n, r) { 153 | return d(m(n, r)) 154 | } 155 | function b(n, r, t) { 156 | return r ? t ? m(r, n) : p(r, n) : t ? C(n) : A(n) 157 | } 158 | n.md5 = b 159 | }(jQuery); 160 | 161 | var testmd5 = jQuery.md5; 162 | //方法一 把封闭函数去掉,所有函数暴露在外面 163 | function test(pwd){ 164 | return b(pwd); 165 | 166 | } 167 | 168 | //方法二 保留封闭函数 (function(n){name:"张三", age:16})(jquery) 169 | function test2(pwd){ 170 | 171 | return testmd5(pwd); 172 | 173 | } -------------------------------------------------------------------------------- /21-虾米 唯品会 汽车之家 爱卡汽车 酷狗 搜狐 微信公众号 楚楚街(md5).js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OFZFZS/JS-Decryption/ecbe794d44fc80fac7f5a88b03eb802c60481a06/21-虾米 唯品会 汽车之家 爱卡汽车 酷狗 搜狐 微信公众号 楚楚街(md5).js -------------------------------------------------------------------------------- /23-新浪二手房(RSA密码固定不变).js: -------------------------------------------------------------------------------- 1 | function BarrettMu(m) 2 | { 3 | this.modulus = biCopy(m); 4 | this.k = biHighIndex(this.modulus) + 1; 5 | var b2k = new BigInt(); 6 | b2k.digits[2 * this.k] = 1; // b2k = b^(2k) 7 | this.mu = biDivide(b2k, this.modulus); 8 | this.bkplus1 = new BigInt(); 9 | this.bkplus1.digits[this.k + 1] = 1; // bkplus1 = b^(k+1) 10 | this.modulo = BarrettMu_modulo; 11 | this.multiplyMod = BarrettMu_multiplyMod; 12 | this.powMod = BarrettMu_powMod; 13 | } 14 | 15 | function BarrettMu_modulo(x) 16 | { 17 | var q1 = biDivideByRadixPower(x, this.k - 1); 18 | var q2 = biMultiply(q1, this.mu); 19 | var q3 = biDivideByRadixPower(q2, this.k + 1); 20 | var r1 = biModuloByRadixPower(x, this.k + 1); 21 | var r2term = biMultiply(q3, this.modulus); 22 | var r2 = biModuloByRadixPower(r2term, this.k + 1); 23 | var r = biSubtract(r1, r2); 24 | if (r.isNeg) { 25 | r = biAdd(r, this.bkplus1); 26 | } 27 | var rgtem = biCompare(r, this.modulus) >= 0; 28 | while (rgtem) { 29 | r = biSubtract(r, this.modulus); 30 | rgtem = biCompare(r, this.modulus) >= 0; 31 | } 32 | return r; 33 | } 34 | 35 | function BarrettMu_multiplyMod(x, y) 36 | { 37 | /* 38 | x = this.modulo(x); 39 | y = this.modulo(y); 40 | */ 41 | var xy = biMultiply(x, y); 42 | return this.modulo(xy); 43 | } 44 | 45 | function BarrettMu_powMod(x, y) 46 | { 47 | var result = new BigInt(); 48 | result.digits[0] = 1; 49 | var a = x; 50 | var k = y; 51 | while (true) { 52 | if ((k.digits[0] & 1) != 0) result = this.multiplyMod(result, a); 53 | k = biShiftRight(k, 1); 54 | if (k.digits[0] == 0 && biHighIndex(k) == 0) break; 55 | a = this.multiplyMod(a, a); 56 | } 57 | return result; 58 | } 59 | 60 | 61 | var biRadixBase = 2; 62 | var biRadixBits = 16; 63 | var bitsPerDigit = biRadixBits; 64 | var biRadix = 1 << 16; // = 2^16 = 65536 65 | var biHalfRadix = biRadix >>> 1; 66 | var biRadixSquared = biRadix * biRadix; 67 | var maxDigitVal = biRadix - 1; 68 | var maxInteger = 9999999999999998; 69 | 70 | // maxDigits: 71 | // Change this to accommodate your largest number size. Use setMaxDigits() 72 | // to change it! 73 | // 74 | // In general, if you're working with numbers of size N bits, you'll need 2*N 75 | // bits of storage. Each digit holds 16 bits. So, a 1024-bit key will need 76 | // 77 | // 1024 * 2 / 16 = 128 digits of storage. 78 | // 79 | 80 | var maxDigits; 81 | var ZERO_ARRAY; 82 | var bigZero, bigOne; 83 | 84 | function setMaxDigits(value) 85 | { 86 | maxDigits = value; 87 | ZERO_ARRAY = new Array(maxDigits); 88 | for (var iza = 0; iza < ZERO_ARRAY.length; iza++) ZERO_ARRAY[iza] = 0; 89 | bigZero = new BigInt(); 90 | bigOne = new BigInt(); 91 | bigOne.digits[0] = 1; 92 | } 93 | 94 | setMaxDigits(20); 95 | 96 | // The maximum number of digits in base 10 you can convert to an 97 | // integer without JavaScript throwing up on you. 98 | var dpl10 = 15; 99 | // lr10 = 10 ^ dpl10 100 | var lr10 = biFromNumber(1000000000000000); 101 | 102 | function BigInt(flag) 103 | { 104 | if (typeof flag == "boolean" && flag == true) { 105 | this.digits = null; 106 | } 107 | else { 108 | this.digits = ZERO_ARRAY.slice(0); 109 | } 110 | this.isNeg = false; 111 | } 112 | 113 | function biFromDecimal(s) 114 | { 115 | var isNeg = s.charAt(0) == '-'; 116 | var i = isNeg ? 1 : 0; 117 | var result; 118 | // Skip leading zeros. 119 | while (i < s.length && s.charAt(i) == '0') ++i; 120 | if (i == s.length) { 121 | result = new BigInt(); 122 | } 123 | else { 124 | var digitCount = s.length - i; 125 | var fgl = digitCount % dpl10; 126 | if (fgl == 0) fgl = dpl10; 127 | result = biFromNumber(Number(s.substr(i, fgl))); 128 | i += fgl; 129 | while (i < s.length) { 130 | result = biAdd(biMultiply(result, lr10), 131 | biFromNumber(Number(s.substr(i, dpl10)))); 132 | i += dpl10; 133 | } 134 | result.isNeg = isNeg; 135 | } 136 | return result; 137 | } 138 | 139 | function biCopy(bi) 140 | { 141 | var result = new BigInt(true); 142 | result.digits = bi.digits.slice(0); 143 | result.isNeg = bi.isNeg; 144 | return result; 145 | } 146 | 147 | function biFromNumber(i) 148 | { 149 | var result = new BigInt(); 150 | result.isNeg = i < 0; 151 | i = Math.abs(i); 152 | var j = 0; 153 | while (i > 0) { 154 | result.digits[j++] = i & maxDigitVal; 155 | i >>= biRadixBits; 156 | } 157 | return result; 158 | } 159 | 160 | function reverseStr(s) 161 | { 162 | var result = ""; 163 | for (var i = s.length - 1; i > -1; --i) { 164 | result += s.charAt(i); 165 | } 166 | return result; 167 | } 168 | 169 | var hexatrigesimalToChar = new Array( 170 | '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 171 | 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 172 | 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 173 | 'u', 'v', 'w', 'x', 'y', 'z' 174 | ); 175 | 176 | function biToString(x, radix) 177 | // 2 <= radix <= 36 178 | { 179 | var b = new BigInt(); 180 | b.digits[0] = radix; 181 | var qr = biDivideModulo(x, b); 182 | var result = hexatrigesimalToChar[qr[1].digits[0]]; 183 | while (biCompare(qr[0], bigZero) == 1) { 184 | qr = biDivideModulo(qr[0], b); 185 | digit = qr[1].digits[0]; 186 | result += hexatrigesimalToChar[qr[1].digits[0]]; 187 | } 188 | return (x.isNeg ? "-" : "") + reverseStr(result); 189 | } 190 | 191 | function biToDecimal(x) 192 | { 193 | var b = new BigInt(); 194 | b.digits[0] = 10; 195 | var qr = biDivideModulo(x, b); 196 | var result = String(qr[1].digits[0]); 197 | while (biCompare(qr[0], bigZero) == 1) { 198 | qr = biDivideModulo(qr[0], b); 199 | result += String(qr[1].digits[0]); 200 | } 201 | return (x.isNeg ? "-" : "") + reverseStr(result); 202 | } 203 | 204 | var hexToChar = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 205 | 'a', 'b', 'c', 'd', 'e', 'f'); 206 | 207 | function digitToHex(n) 208 | { 209 | var mask = 0xf; 210 | var result = ""; 211 | for (i = 0; i < 4; ++i) { 212 | result += hexToChar[n & mask]; 213 | n >>>= 4; 214 | } 215 | return reverseStr(result); 216 | } 217 | 218 | function biToHex(x) 219 | { 220 | var result = ""; 221 | var n = biHighIndex(x); 222 | for (var i = biHighIndex(x); i > -1; --i) { 223 | result += digitToHex(x.digits[i]); 224 | } 225 | return result; 226 | } 227 | 228 | function charToHex(c) 229 | { 230 | var ZERO = 48; 231 | var NINE = ZERO + 9; 232 | var littleA = 97; 233 | var littleZ = littleA + 25; 234 | var bigA = 65; 235 | var bigZ = 65 + 25; 236 | var result; 237 | 238 | if (c >= ZERO && c <= NINE) { 239 | result = c - ZERO; 240 | } else if (c >= bigA && c <= bigZ) { 241 | result = 10 + c - bigA; 242 | } else if (c >= littleA && c <= littleZ) { 243 | result = 10 + c - littleA; 244 | } else { 245 | result = 0; 246 | } 247 | return result; 248 | } 249 | 250 | function hexToDigit(s) 251 | { 252 | var result = 0; 253 | var sl = Math.min(s.length, 4); 254 | for (var i = 0; i < sl; ++i) { 255 | result <<= 4; 256 | result |= charToHex(s.charCodeAt(i)) 257 | } 258 | return result; 259 | } 260 | 261 | function biFromHex(s) 262 | { 263 | var result = new BigInt(); 264 | var sl = s.length; 265 | for (var i = sl, j = 0; i > 0; i -= 4, ++j) { 266 | result.digits[j] = hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4))); 267 | } 268 | return result; 269 | } 270 | 271 | function biFromString(s, radix) 272 | { 273 | var isNeg = s.charAt(0) == '-'; 274 | var istop = isNeg ? 1 : 0; 275 | var result = new BigInt(); 276 | var place = new BigInt(); 277 | place.digits[0] = 1; // radix^0 278 | for (var i = s.length - 1; i >= istop; i--) { 279 | var c = s.charCodeAt(i); 280 | var digit = charToHex(c); 281 | var biDigit = biMultiplyDigit(place, digit); 282 | result = biAdd(result, biDigit); 283 | place = biMultiplyDigit(place, radix); 284 | } 285 | result.isNeg = isNeg; 286 | return result; 287 | } 288 | 289 | function biToBytes(x) 290 | // Returns a string containing raw bytes. 291 | { 292 | var result = ""; 293 | for (var i = biHighIndex(x); i > -1; --i) { 294 | result += digitToBytes(x.digits[i]); 295 | } 296 | return result; 297 | } 298 | 299 | function digitToBytes(n) 300 | // Convert two-byte digit to string containing both bytes. 301 | { 302 | var c1 = String.fromCharCode(n & 0xff); 303 | n >>>= 8; 304 | var c2 = String.fromCharCode(n & 0xff); 305 | return c2 + c1; 306 | } 307 | 308 | function biDump(b) 309 | { 310 | return (b.isNeg ? "-" : "") + b.digits.join(" "); 311 | } 312 | 313 | function biAdd(x, y) 314 | { 315 | var result; 316 | 317 | if (x.isNeg != y.isNeg) { 318 | y.isNeg = !y.isNeg; 319 | result = biSubtract(x, y); 320 | y.isNeg = !y.isNeg; 321 | } 322 | else { 323 | result = new BigInt(); 324 | var c = 0; 325 | var n; 326 | for (var i = 0; i < x.digits.length; ++i) { 327 | n = x.digits[i] + y.digits[i] + c; 328 | result.digits[i] = n & 0xffff; 329 | c = Number(n >= biRadix); 330 | } 331 | result.isNeg = x.isNeg; 332 | } 333 | return result; 334 | } 335 | 336 | function biSubtract(x, y) 337 | { 338 | var result; 339 | if (x.isNeg != y.isNeg) { 340 | y.isNeg = !y.isNeg; 341 | result = biAdd(x, y); 342 | y.isNeg = !y.isNeg; 343 | } else { 344 | result = new BigInt(); 345 | var n, c; 346 | c = 0; 347 | for (var i = 0; i < x.digits.length; ++i) { 348 | n = x.digits[i] - y.digits[i] + c; 349 | result.digits[i] = n & 0xffff; 350 | // Stupid non-conforming modulus operation. 351 | if (result.digits[i] < 0) result.digits[i] += biRadix; 352 | c = 0 - Number(n < 0); 353 | } 354 | // Fix up the negative sign, if any. 355 | if (c == -1) { 356 | c = 0; 357 | for (var i = 0; i < x.digits.length; ++i) { 358 | n = 0 - result.digits[i] + c; 359 | result.digits[i] = n & 0xffff; 360 | // Stupid non-conforming modulus operation. 361 | if (result.digits[i] < 0) result.digits[i] += biRadix; 362 | c = 0 - Number(n < 0); 363 | } 364 | // Result is opposite sign of arguments. 365 | result.isNeg = !x.isNeg; 366 | } else { 367 | // Result is same sign. 368 | result.isNeg = x.isNeg; 369 | } 370 | } 371 | return result; 372 | } 373 | 374 | function biHighIndex(x) 375 | { 376 | var result = x.digits.length - 1; 377 | while (result > 0 && x.digits[result] == 0) --result; 378 | return result; 379 | } 380 | 381 | function biNumBits(x) 382 | { 383 | var n = biHighIndex(x); 384 | var d = x.digits[n]; 385 | var m = (n + 1) * bitsPerDigit; 386 | var result; 387 | for (result = m; result > m - bitsPerDigit; --result) { 388 | if ((d & 0x8000) != 0) break; 389 | d <<= 1; 390 | } 391 | return result; 392 | } 393 | 394 | function biMultiply(x, y) 395 | { 396 | var result = new BigInt(); 397 | var c; 398 | var n = biHighIndex(x); 399 | var t = biHighIndex(y); 400 | var u, uv, k; 401 | 402 | for (var i = 0; i <= t; ++i) { 403 | c = 0; 404 | k = i; 405 | for (j = 0; j <= n; ++j, ++k) { 406 | uv = result.digits[k] + x.digits[j] * y.digits[i] + c; 407 | result.digits[k] = uv & maxDigitVal; 408 | c = uv >>> biRadixBits; 409 | } 410 | result.digits[i + n + 1] = c; 411 | } 412 | // Someone give me a logical xor, please. 413 | result.isNeg = x.isNeg != y.isNeg; 414 | return result; 415 | } 416 | 417 | function biMultiplyDigit(x, y) 418 | { 419 | var n, c, uv; 420 | 421 | result = new BigInt(); 422 | n = biHighIndex(x); 423 | c = 0; 424 | for (var j = 0; j <= n; ++j) { 425 | uv = result.digits[j] + x.digits[j] * y + c; 426 | result.digits[j] = uv & maxDigitVal; 427 | c = uv >>> biRadixBits; 428 | } 429 | result.digits[1 + n] = c; 430 | return result; 431 | } 432 | 433 | function arrayCopy(src, srcStart, dest, destStart, n) 434 | { 435 | var m = Math.min(srcStart + n, src.length); 436 | for (var i = srcStart, j = destStart; i < m; ++i, ++j) { 437 | dest[j] = src[i]; 438 | } 439 | } 440 | 441 | var highBitMasks = new Array(0x0000, 0x8000, 0xC000, 0xE000, 0xF000, 0xF800, 442 | 0xFC00, 0xFE00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0, 443 | 0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF); 444 | 445 | function biShiftLeft(x, n) 446 | { 447 | var digitCount = Math.floor(n / bitsPerDigit); 448 | var result = new BigInt(); 449 | arrayCopy(x.digits, 0, result.digits, digitCount, 450 | result.digits.length - digitCount); 451 | var bits = n % bitsPerDigit; 452 | var rightBits = bitsPerDigit - bits; 453 | for (var i = result.digits.length - 1, i1 = i - 1; i > 0; --i, --i1) { 454 | result.digits[i] = ((result.digits[i] << bits) & maxDigitVal) | 455 | ((result.digits[i1] & highBitMasks[bits]) >>> 456 | (rightBits)); 457 | } 458 | result.digits[0] = ((result.digits[i] << bits) & maxDigitVal); 459 | result.isNeg = x.isNeg; 460 | return result; 461 | } 462 | 463 | var lowBitMasks = new Array(0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 464 | 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 465 | 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF); 466 | 467 | function biShiftRight(x, n) 468 | { 469 | var digitCount = Math.floor(n / bitsPerDigit); 470 | var result = new BigInt(); 471 | arrayCopy(x.digits, digitCount, result.digits, 0, 472 | x.digits.length - digitCount); 473 | var bits = n % bitsPerDigit; 474 | var leftBits = bitsPerDigit - bits; 475 | for (var i = 0, i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) { 476 | result.digits[i] = (result.digits[i] >>> bits) | 477 | ((result.digits[i1] & lowBitMasks[bits]) << leftBits); 478 | } 479 | result.digits[result.digits.length - 1] >>>= bits; 480 | result.isNeg = x.isNeg; 481 | return result; 482 | } 483 | 484 | function biMultiplyByRadixPower(x, n) 485 | { 486 | var result = new BigInt(); 487 | arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n); 488 | return result; 489 | } 490 | 491 | function biDivideByRadixPower(x, n) 492 | { 493 | var result = new BigInt(); 494 | arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n); 495 | return result; 496 | } 497 | 498 | function biModuloByRadixPower(x, n) 499 | { 500 | var result = new BigInt(); 501 | arrayCopy(x.digits, 0, result.digits, 0, n); 502 | return result; 503 | } 504 | 505 | function biCompare(x, y) 506 | { 507 | if (x.isNeg != y.isNeg) { 508 | return 1 - 2 * Number(x.isNeg); 509 | } 510 | for (var i = x.digits.length - 1; i >= 0; --i) { 511 | if (x.digits[i] != y.digits[i]) { 512 | if (x.isNeg) { 513 | return 1 - 2 * Number(x.digits[i] > y.digits[i]); 514 | } else { 515 | return 1 - 2 * Number(x.digits[i] < y.digits[i]); 516 | } 517 | } 518 | } 519 | return 0; 520 | } 521 | 522 | function biDivideModulo(x, y) 523 | { 524 | var nb = biNumBits(x); 525 | var tb = biNumBits(y); 526 | var origYIsNeg = y.isNeg; 527 | var q, r; 528 | if (nb < tb) { 529 | // |x| < |y| 530 | if (x.isNeg) { 531 | q = biCopy(bigOne); 532 | q.isNeg = !y.isNeg; 533 | x.isNeg = false; 534 | y.isNeg = false; 535 | r = biSubtract(y, x); 536 | // Restore signs, 'cause they're references. 537 | x.isNeg = true; 538 | y.isNeg = origYIsNeg; 539 | } else { 540 | q = new BigInt(); 541 | r = biCopy(x); 542 | } 543 | return new Array(q, r); 544 | } 545 | 546 | q = new BigInt(); 547 | r = x; 548 | 549 | // Normalize Y. 550 | var t = Math.ceil(tb / bitsPerDigit) - 1; 551 | var lambda = 0; 552 | while (y.digits[t] < biHalfRadix) { 553 | y = biShiftLeft(y, 1); 554 | ++lambda; 555 | ++tb; 556 | t = Math.ceil(tb / bitsPerDigit) - 1; 557 | } 558 | // Shift r over to keep the quotient constant. We'll shift the 559 | // remainder back at the end. 560 | r = biShiftLeft(r, lambda); 561 | nb += lambda; // Update the bit count for x. 562 | var n = Math.ceil(nb / bitsPerDigit) - 1; 563 | 564 | var b = biMultiplyByRadixPower(y, n - t); 565 | while (biCompare(r, b) != -1) { 566 | ++q.digits[n - t]; 567 | r = biSubtract(r, b); 568 | } 569 | for (var i = n; i > t; --i) { 570 | var ri = (i >= r.digits.length) ? 0 : r.digits[i]; 571 | var ri1 = (i - 1 >= r.digits.length) ? 0 : r.digits[i - 1]; 572 | var ri2 = (i - 2 >= r.digits.length) ? 0 : r.digits[i - 2]; 573 | var yt = (t >= y.digits.length) ? 0 : y.digits[t]; 574 | var yt1 = (t - 1 >= y.digits.length) ? 0 : y.digits[t - 1]; 575 | if (ri == yt) { 576 | q.digits[i - t - 1] = maxDigitVal; 577 | } else { 578 | q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt); 579 | } 580 | 581 | var c1 = q.digits[i - t - 1] * ((yt * biRadix) + yt1); 582 | var c2 = (ri * biRadixSquared) + ((ri1 * biRadix) + ri2); 583 | while (c1 > c2) { 584 | --q.digits[i - t - 1]; 585 | c1 = q.digits[i - t - 1] * ((yt * biRadix) | yt1); 586 | c2 = (ri * biRadix * biRadix) + ((ri1 * biRadix) + ri2); 587 | } 588 | 589 | b = biMultiplyByRadixPower(y, i - t - 1); 590 | r = biSubtract(r, biMultiplyDigit(b, q.digits[i - t - 1])); 591 | if (r.isNeg) { 592 | r = biAdd(r, b); 593 | --q.digits[i - t - 1]; 594 | } 595 | } 596 | r = biShiftRight(r, lambda); 597 | // Fiddle with the signs and stuff to make sure that 0 <= r < y. 598 | q.isNeg = x.isNeg != origYIsNeg; 599 | if (x.isNeg) { 600 | if (origYIsNeg) { 601 | q = biAdd(q, bigOne); 602 | } else { 603 | q = biSubtract(q, bigOne); 604 | } 605 | y = biShiftRight(y, lambda); 606 | r = biSubtract(y, r); 607 | } 608 | // Check for the unbelievably stupid degenerate case of r == -0. 609 | if (r.digits[0] == 0 && biHighIndex(r) == 0) r.isNeg = false; 610 | 611 | return new Array(q, r); 612 | } 613 | 614 | function biDivide(x, y) 615 | { 616 | return biDivideModulo(x, y)[0]; 617 | } 618 | 619 | function biModulo(x, y) 620 | { 621 | return biDivideModulo(x, y)[1]; 622 | } 623 | 624 | function biMultiplyMod(x, y, m) 625 | { 626 | return biModulo(biMultiply(x, y), m); 627 | } 628 | 629 | function biPow(x, y) 630 | { 631 | var result = bigOne; 632 | var a = x; 633 | while (true) { 634 | if ((y & 1) != 0) result = biMultiply(result, a); 635 | y >>= 1; 636 | if (y == 0) break; 637 | a = biMultiply(a, a); 638 | } 639 | return result; 640 | } 641 | 642 | function biPowMod(x, y, m) 643 | { 644 | var result = bigOne; 645 | var a = x; 646 | var k = y; 647 | while (true) { 648 | if ((k.digits[0] & 1) != 0) result = biMultiplyMod(result, a, m); 649 | k = biShiftRight(k, 1); 650 | if (k.digits[0] == 0 && biHighIndex(k) == 0) break; 651 | a = biMultiplyMod(a, a, m); 652 | } 653 | return result; 654 | } 655 | var RSAAPP = {}; 656 | 657 | RSAAPP.NoPadding = "NoPadding"; 658 | RSAAPP.PKCS1Padding = "PKCS1Padding"; 659 | RSAAPP.RawEncoding = "RawEncoding"; 660 | RSAAPP.NumericEncoding = "NumericEncoding" 661 | 662 | /*****************************************************************************/ 663 | 664 | function RSAKeyPair(encryptionExponent, decryptionExponent, modulus, keylen) 665 | /* 666 | * encryptionExponent The encryption exponent (i.e. public 667 | * encryption key) to be used for 668 | * encrypting messages. If you aren't 669 | * doing any encrypting, a dummy 670 | * exponent such as "10001" can be 671 | * passed. 672 | * 673 | * decryptionExponent The decryption exponent (i.e. private 674 | * decryption key) to be used for 675 | * decrypting messages. If you aren't 676 | * doing any decrypting, a dummy 677 | * exponent such as "10001" can be 678 | * passed. 679 | * 680 | * modulus The modulus to be used both for 681 | * encrypting and decrypting messages. 682 | * 683 | * keylen The optional length of the key, in 684 | * bits. If omitted, RSAKeyPair will 685 | * attempt to derive a key length (but, 686 | * see the notes below). 687 | * 688 | * returns The "new" object creator returns an 689 | * instance of a key object that can be 690 | * used to encrypt/decrypt messages. 691 | * 692 | * This routine is invoked as the first step in the encryption or decryption 693 | * process to take the three numbers (expressed as hexadecimal strings) that 694 | * are used for RSA asymmetric encryption/decryption and turn them into a key 695 | * object that can be used for encrypting and decrypting. 696 | * 697 | * The key object is created thusly: 698 | * 699 | * RSAKey = new RSAKeyPair("ABC12345", 10001, "987654FE"); 700 | * 701 | * or: 702 | * 703 | * RSAKey = new RSAKeyPair("ABC12345", 10001, "987654FE", 64); 704 | * 705 | * Note that RSAKeyPair will try to derive the length of the key that is being 706 | * used, from the key itself. The key length is especially useful when one of 707 | * the padding options is used and/or when the encrypted messages created by 708 | * the routine encryptedString are exchanged with a real crypto library such 709 | * as OpenSSL or Microsoft, as it determines how many padding characters are 710 | * appended. 711 | * 712 | * Usually, RSAKeyPair can determine the key length from the modulus of the 713 | * key but this doesn't always work properly, depending on the actual value of 714 | * the modulus. If you are exchanging messages with a real crypto library, 715 | * such as OpenSSL or Microsoft, that depends on the fact that the blocks 716 | * being passed to it are properly padded, you'll want the key length to be 717 | * set properly. If that's the case, of if you just want to be sure, you 718 | * should specify the key length that you used to generated the key, in bits 719 | * when this routine is invoked. 720 | */ 721 | { 722 | /* 723 | * Convert from hexadecimal and save the encryption/decryption exponents and 724 | * modulus as big integers in the key object. 725 | */ 726 | this.e = biFromHex(encryptionExponent); 727 | this.d = biFromHex(decryptionExponent); 728 | this.m = biFromHex(modulus); 729 | /* 730 | * Using big integers, we can represent two bytes per element in the big 731 | * integer array, so we calculate the chunk size as: 732 | * 733 | * chunkSize = 2 * (number of digits in modulus - 1) 734 | * 735 | * Since biHighIndex returns the high index, not the number of digits, the 736 | * number 1 has already been subtracted from its answer. 737 | * 738 | * However, having said all this, "User Knows Best". If our caller passes us 739 | * a key length (in bits), we'll treat it as gospel truth. 740 | */ 741 | if (typeof(keylen) != 'number') { this.chunkSize = 2 * biHighIndex(this.m); } 742 | else { this.chunkSize = keylen / 8; } 743 | 744 | this.radix = 16; 745 | /* 746 | * Precalculate the stuff used for Barrett modular reductions. 747 | */ 748 | this.barrett = new BarrettMu(this.m); 749 | } 750 | 751 | /*****************************************************************************/ 752 | 753 | function encryptedString(key, s, pad, encoding) 754 | /* 755 | * key The previously-built RSA key whose 756 | * public key component is to be used to 757 | * encrypt the plaintext string. 758 | * 759 | * s The plaintext string that is to be 760 | * encrypted, using the RSA assymmetric 761 | * encryption method. 762 | * 763 | * pad The optional padding method to use 764 | * when extending the plaintext to the 765 | * full chunk size required by the RSA 766 | * algorithm. To maintain compatibility 767 | * with other crypto libraries, the 768 | * padding method is described by a 769 | * string. The default, if not 770 | * specified is "OHDave". Here are the 771 | * choices: 772 | * 773 | * OHDave - this is the original 774 | * padding method employed by Dave 775 | * Shapiro and Rob Saunders. If 776 | * this method is chosen, the 777 | * plaintext can be of any length. 778 | * It will be padded to the correct 779 | * length with zeros and then broken 780 | * up into chunks of the correct 781 | * length before being encrypted. 782 | * The resultant cyphertext blocks 783 | * will be separated by blanks. 784 | * 785 | * Note that the original code by 786 | * Dave Shapiro reverses the byte 787 | * order to little-endian, as the 788 | * plaintext is encrypted. If 789 | * either these JavaScript routines 790 | * or one of the complementary 791 | * PHP/Perl routines derived from 792 | * this code is used for decryption, 793 | * the byte order will be reversed 794 | * again upon decryption so as to 795 | * come out correctly. 796 | * 797 | * Also note that this padding 798 | * method is claimed to be less 799 | * secure than PKCS1Padding. 800 | * 801 | * NoPadding - this method truncates 802 | * the plaintext to the length of 803 | * the RSA key, if it is longer. If 804 | * its length is shorter, it is 805 | * padded with zeros. In either 806 | * case, the plaintext string is 807 | * reversed to preserve big-endian 808 | * order before it is encrypted to 809 | * maintain compatibility with real 810 | * crypto libraries such as OpenSSL 811 | * or Microsoft. When the 812 | * cyphertext is to be decrypted 813 | * by a crypto library, the 814 | * library routine's RSAAPP.NoPadding 815 | * flag, or its equivalent, should 816 | * be used. 817 | * 818 | * Note that this padding method is 819 | * claimed to be less secure than 820 | * PKCS1Padding. 821 | * 822 | * PKCS1Padding - the PKCS1v1.5 823 | * padding method (as described in 824 | * RFC 2313) is employed to pad the 825 | * plaintext string. The plaintext 826 | * string must be no longer than the 827 | * length of the RSA key minus 11, 828 | * since PKCS1v1.5 requires 3 bytes 829 | * of overhead and specifies a 830 | * minimum pad of 8 bytes. The 831 | * plaintext string is padded with 832 | * randomly-generated bytes and then 833 | * its order is reversed to preserve 834 | * big-endian order before it is 835 | * encrypted to maintain 836 | * compatibility with real crypto 837 | * libraries such as OpenSSL or 838 | * Microsoft. When the cyphertext 839 | * is to be decrypted by a crypto 840 | * library, the library routine's 841 | * RSAAPP.PKCS1Padding flag, or its 842 | * equivalent, should be used. 843 | * 844 | * encoding The optional encoding scheme to use 845 | * for the return value. If ommitted, 846 | * numeric encoding will be used. 847 | * 848 | * RawEncoding - The return value 849 | * is given as its raw value. 850 | * This is the easiest method when 851 | * interoperating with server-side 852 | * OpenSSL, as no additional conversion 853 | * is required. Use the constant 854 | * RSAAPP.RawEncoding for this option. 855 | * 856 | * NumericEncoding - The return value 857 | * is given as a number in hexadecimal. 858 | * Perhaps useful for debugging, but 859 | * will need to be translated back to 860 | * its raw equivalent (e.g. using 861 | * PHP's hex2bin) before using with 862 | * OpenSSL. Use the constant 863 | * RSAAPP.NumericEncoding for this option. 864 | * 865 | * returns The cyphertext block that results 866 | * from encrypting the plaintext string 867 | * s with the RSA key. 868 | * 869 | * This routine accepts a plaintext string that is to be encrypted with the 870 | * public key component of the previously-built RSA key using the RSA 871 | * assymmetric encryption method. Before it is encrypted, the plaintext 872 | * string is padded to the same length as the encryption key for proper 873 | * encryption. 874 | * 875 | * Depending on the padding method chosen, an optional header with block type 876 | * is prepended, the plaintext is padded using zeros or randomly-generated 877 | * bytes, and then the plaintext is possibly broken up into chunks. 878 | * 879 | * Note that, for padding with zeros, this routine was altered by Rob Saunders 880 | * (rob@robsaunders.net). The new routine pads the string after it has been 881 | * converted to an array. This fixes an incompatibility with Flash MX's 882 | * ActionScript. 883 | * 884 | * The various padding schemes employed by this routine, and as presented to 885 | * RSA for encryption, are shown below. Note that the RSA encryption done 886 | * herein reverses the byte order as encryption is done: 887 | * 888 | * Plaintext In 889 | * ------------ 890 | * 891 | * d5 d4 d3 d2 d1 d0 892 | * 893 | * OHDave 894 | * ------ 895 | * 896 | * d5 d4 d3 d2 d1 d0 00 00 00 /.../ 00 00 00 00 00 00 00 00 897 | * 898 | * NoPadding 899 | * --------- 900 | * 901 | * 00 00 00 00 00 00 00 00 00 /.../ 00 00 d0 d1 d2 d3 d4 d5 902 | * 903 | * PKCS1Padding 904 | * ------------ 905 | * 906 | * d0 d1 d2 d3 d4 d5 00 p0 p1 /.../ p2 p3 p4 p5 p6 p7 02 00 907 | * \------------ ------------/ 908 | * \/ 909 | * Minimum 8 bytes pad length 910 | */ 911 | { 912 | var a = new Array(); // The usual Alice and Bob stuff 913 | var sl = s.length; // Plaintext string length 914 | var i, j, k; // The usual Fortran index stuff 915 | var padtype; // Type of padding to do 916 | var encodingtype; // Type of output encoding 917 | var rpad; // Random pad 918 | var al; // Array length 919 | var result = ""; // Cypthertext result 920 | var block; // Big integer block to encrypt 921 | var crypt; // Big integer result 922 | var text; // Text result 923 | /* 924 | * Figure out the padding type. 925 | */ 926 | if (typeof(pad) == 'string') { 927 | if (pad == RSAAPP.NoPadding) { padtype = 1; } 928 | else if (pad == RSAAPP.PKCS1Padding) { padtype = 2; } 929 | else { padtype = 0; } 930 | } 931 | else { padtype = 0; } 932 | /* 933 | * Determine encoding type. 934 | */ 935 | if (typeof(encoding) == 'string' && encoding == RSAAPP.RawEncoding) { 936 | encodingtype = 1; 937 | } 938 | else { encodingtype = 0; } 939 | 940 | /* 941 | * If we're not using Dave's padding method, we need to truncate long 942 | * plaintext blocks to the correct length for the padding method used: 943 | * 944 | * NoPadding - key length 945 | * PKCS1Padding - key length - 11 946 | */ 947 | if (padtype == 1) { 948 | if (sl > key.chunkSize) { sl = key.chunkSize; } 949 | } 950 | else if (padtype == 2) { 951 | if (sl > (key.chunkSize-11)) { sl = key.chunkSize - 11; } 952 | } 953 | /* 954 | * Convert the plaintext string to an array of characters so that we can work 955 | * with individual characters. 956 | * 957 | * Note that, if we're talking to a real crypto library at the other end, we 958 | * reverse the plaintext order to preserve big-endian order. 959 | */ 960 | i = 0; 961 | 962 | if (padtype == 2) { j = sl - 1; } 963 | else { j = key.chunkSize - 1; } 964 | 965 | while (i < sl) { 966 | if (padtype) { a[j] = s.charCodeAt(i); } 967 | else { a[i] = s.charCodeAt(i); } 968 | 969 | i++; j--; 970 | } 971 | /* 972 | * Now is the time to add the padding. 973 | * 974 | * If we're doing PKCS1v1.5 padding, we pick up padding where we left off and 975 | * pad the remainder of the block. Otherwise, we pad at the front of the 976 | * block. This gives us the correct padding for big-endian blocks. 977 | * 978 | * The padding is either a zero byte or a randomly-generated non-zero byte. 979 | */ 980 | if (padtype == 1) { i = 0; } 981 | 982 | j = key.chunkSize - (sl % key.chunkSize); 983 | 984 | while (j > 0) { 985 | if (padtype == 2) { 986 | rpad = Math.floor(Math.random() * 256); 987 | 988 | while (!rpad) { rpad = Math.floor(Math.random() * 256); } 989 | 990 | a[i] = rpad; 991 | } 992 | else { a[i] = 0; } 993 | 994 | i++; j--; 995 | } 996 | /* 997 | * For PKCS1v1.5 padding, we need to fill in the block header. 998 | * 999 | * According to RFC 2313, a block type, a padding string, and the data shall 1000 | * be formatted into the encryption block: 1001 | * 1002 | * EncrBlock = 00 || BlockType || PadString || 00 || Data 1003 | * 1004 | * The block type shall be a single octet indicating the structure of the 1005 | * encryption block. For this version of the document it shall have value 00, 1006 | * 01, or 02. For a private-key operation, the block type shall be 00 or 01. 1007 | * For a public-key operation, it shall be 02. 1008 | * 1009 | * The padding string shall consist of enough octets to pad the encryption 1010 | * block to the length of the encryption key. For block type 00, the octets 1011 | * shall have value 00; for block type 01, they shall have value FF; and for 1012 | * block type 02, they shall be pseudorandomly generated and nonzero. 1013 | * 1014 | * Note that in a previous step, we wrote padding bytes into the first three 1015 | * bytes of the encryption block because it was simpler to do so. We now 1016 | * overwrite them. 1017 | */ 1018 | if (padtype == 2) 1019 | { 1020 | a[sl] = 0; 1021 | a[key.chunkSize-2] = 2; 1022 | a[key.chunkSize-1] = 0; 1023 | } 1024 | /* 1025 | * Carve up the plaintext and encrypt each of the resultant blocks. 1026 | */ 1027 | al = a.length; 1028 | 1029 | for (i = 0; i < al; i += key.chunkSize) { 1030 | /* 1031 | * Get a block. 1032 | */ 1033 | block = new BigInt(); 1034 | 1035 | j = 0; 1036 | 1037 | for (k = i; k < (i+key.chunkSize); ++j) { 1038 | block.digits[j] = a[k++]; 1039 | block.digits[j] += a[k++] << 8; 1040 | } 1041 | /* 1042 | * Encrypt it, convert it to text, and append it to the result. 1043 | */ 1044 | crypt = key.barrett.powMod(block, key.e); 1045 | if (encodingtype == 1) { 1046 | text = biToBytes(crypt); 1047 | } 1048 | else { 1049 | text = (key.radix == 16) ? biToHex(crypt) : biToString(crypt, key.radix); 1050 | } 1051 | result += text; 1052 | } 1053 | /* 1054 | * Return the result, removing the last space. 1055 | */ 1056 | //result = (result.substring(0, result.length - 1)); 1057 | return result; 1058 | } 1059 | 1060 | /*****************************************************************************/ 1061 | 1062 | function decryptedString(key, c) 1063 | /* 1064 | * key The previously-built RSA key whose 1065 | * private key component is to be used 1066 | * to decrypt the cyphertext string. 1067 | * 1068 | * c The cyphertext string that is to be 1069 | * decrypted, using the RSA assymmetric 1070 | * encryption method. 1071 | * 1072 | * returns The plaintext block that results from 1073 | * decrypting the cyphertext string c 1074 | * with the RSA key. 1075 | * 1076 | * This routine is the complementary decryption routine that is meant to be 1077 | * used for JavaScript decryption of cyphertext blocks that were encrypted 1078 | * using the OHDave padding method of the encryptedString routine (in this 1079 | * module). It can also decrypt cyphertext blocks that were encrypted by 1080 | * RSAEncode (in CryptoFuncs.pm or CryptoFuncs.php) so that encrypted 1081 | * messages can be sent of insecure links (e.g. HTTP) to a Web page. 1082 | * 1083 | * It accepts a cyphertext string that is to be decrypted with the public key 1084 | * component of the previously-built RSA key using the RSA assymmetric 1085 | * encryption method. Multiple cyphertext blocks are broken apart, if they 1086 | * are found in c, and each block is decrypted. All of the decrypted blocks 1087 | * are concatenated back together to obtain the original plaintext string. 1088 | * 1089 | * This routine assumes that the plaintext was padded to the same length as 1090 | * the encryption key with zeros. Therefore, it removes any zero bytes that 1091 | * are found at the end of the last decrypted block, before it is appended to 1092 | * the decrypted plaintext string. 1093 | * 1094 | * Note that the encryptedString routine (in this module) works fairly quickly 1095 | * simply by virtue of the fact that the public key most often chosen is quite 1096 | * short (e.g. 0x10001). This routine does not have that luxury. The 1097 | * decryption key that it must employ is the full key length. For long keys, 1098 | * this can result in serious timing delays (e.g. 7-8 seconds to decrypt using 1099 | * 2048 bit keys on a reasonably fast machine, under the Firefox Web browser). 1100 | * 1101 | * If you intend to send encrypted messagess to a JavaScript program running 1102 | * under a Web browser, you might consider using shorter keys to keep the 1103 | * decryption times low. Alternately, a better scheme is to generate a random 1104 | * key for use by a symmetric encryption algorithm and transmit it to the 1105 | * other end, after encrypting it with encryptedString. The other end can use 1106 | * a real crypto library (e.g. OpenSSL or Microsoft) to decrypt the key and 1107 | * then use it to encrypt all of the messages (with a symmetric encryption 1108 | * algorithm such as Twofish or AES) bound for the JavaScript program. 1109 | * Symmetric decryption is orders of magnitude faster than asymmetric and 1110 | * should yield low decryption times, even when executed in JavaScript. 1111 | * 1112 | * Also note that only the OHDave padding method (e.g. zeros) is supported by 1113 | * this routine *AND* that this routine expects little-endian cyphertext, as 1114 | * created by the encryptedString routine (in this module) or the RSAEncode 1115 | * routine (in either CryptoFuncs.pm or CryptoFuncs.php). You can use one of 1116 | * the real crypto libraries to create cyphertext that can be decrypted by 1117 | * this routine, if you reverse the plaintext byte order first and then 1118 | * manually pad it with zero bytes. The plaintext should then be encrypted 1119 | * with the NoPadding flag or its equivalent in the crypto library of your 1120 | * choice. 1121 | */ 1122 | { 1123 | var blocks = c.split(" "); // Multiple blocks of cyphertext 1124 | var b; // The usual Alice and Bob stuff 1125 | var i, j; // The usual Fortran index stuff 1126 | var bi; // Cyphertext as a big integer 1127 | var result = ""; // Plaintext result 1128 | /* 1129 | * Carve up the cyphertext into blocks. 1130 | */ 1131 | for (i = 0; i < blocks.length; ++i) { 1132 | /* 1133 | * Depending on the radix being used for the key, convert this cyphertext 1134 | * block into a big integer. 1135 | */ 1136 | if (key.radix == 16) { bi = biFromHex(blocks[i]); } 1137 | else { bi = biFromString(blocks[i], key.radix); } 1138 | /* 1139 | * Decrypt the cyphertext. 1140 | */ 1141 | b = key.barrett.powMod(bi, key.d); 1142 | /* 1143 | * Convert the decrypted big integer back to the plaintext string. Since 1144 | * we are using big integers, each element thereof represents two bytes of 1145 | * plaintext. 1146 | */ 1147 | for (j = 0; j <= biHighIndex(b); ++j) { 1148 | result += String.fromCharCode(b.digits[j] & 255, b.digits[j] >> 8); 1149 | } 1150 | } 1151 | /* 1152 | * Remove trailing null, if any. 1153 | */ 1154 | if (result.charCodeAt(result.length - 1) == 0) { 1155 | result = result.substring(0, result.length - 1); 1156 | } 1157 | /* 1158 | * Return the plaintext. 1159 | */ 1160 | return (result); 1161 | } 1162 | 1163 | function test(pwd){ 1164 | setMaxDigits(129); 1165 | var pubkey = "BC087C7C00848CE8A349C9072C3229E0D595F817EDDE9ABF6FC72B41942A759E97956CE9CB7D1F2E99399EADBACC0531F16EAE8EFCB68553DE0E125B2231ED955ADBF5208E65DC804237C93EB23C83E7ECDA0B586ECF31839038EE6B640E0EEC5FF17D219FDEA33E730F287F0D384C74A53DFE1F91ACC63C7C92039A43AC6E97"; 1166 | var key_to_encode = new RSAKeyPair("10001", "", pubkey); 1167 | return encryptedString(key_to_encode, pwd); 1168 | 1169 | } -------------------------------------------------------------------------------- /24-手机百度(RSA各种函数寻找).js: -------------------------------------------------------------------------------- 1 | var navigator = {}; 2 | var window = this; 3 | function BarrettMu(i) { 4 | this.modulus = biCopy(i), 5 | this.k = biHighIndex(this.modulus) + 1; 6 | var t = new BigInt; 7 | t.digits[2 * this.k] = 1, 8 | this.mu = biDivide(t, this.modulus), 9 | this.bkplus1 = new BigInt, 10 | this.bkplus1.digits[this.k + 1] = 1, 11 | this.modulo = BarrettMu_modulo, 12 | this.multiplyMod = BarrettMu_multiplyMod, 13 | this.powMod = BarrettMu_powMod 14 | } 15 | function BarrettMu_modulo(i) { 16 | var t = biDivideByRadixPower(i, this.k - 1) 17 | , r = biMultiply(t, this.mu) 18 | , e = biDivideByRadixPower(r, this.k + 1) 19 | , g = biModuloByRadixPower(i, this.k + 1) 20 | , s = biMultiply(e, this.modulus) 21 | , n = biModuloByRadixPower(s, this.k + 1) 22 | , d = biSubtract(g, n); 23 | d.isNeg && (d = biAdd(d, this.bkplus1)); 24 | for (var a = biCompare(d, this.modulus) >= 0; a; ) 25 | d = biSubtract(d, this.modulus), 26 | a = biCompare(d, this.modulus) >= 0; 27 | return d 28 | } 29 | function BarrettMu_multiplyMod(i, t) { 30 | var r = biMultiply(i, t); 31 | return this.modulo(r) 32 | } 33 | function BarrettMu_powMod(i, t) { 34 | var r = new BigInt; 35 | r.digits[0] = 1; 36 | for (var e = i, g = t; ; ) { 37 | if (0 != (1 & g.digits[0]) && (r = this.multiplyMod(r, e)), 38 | g = biShiftRight(g, 1), 39 | 0 == g.digits[0] && 0 == biHighIndex(g)) 40 | break; 41 | e = this.multiplyMod(e, e) 42 | } 43 | return r 44 | } 45 | function setMaxDigits(i) { 46 | maxDigits = i, 47 | ZERO_ARRAY = new Array(maxDigits); 48 | for (var t = 0; t < ZERO_ARRAY.length; t++) 49 | ZERO_ARRAY[t] = 0; 50 | bigZero = new BigInt, 51 | bigOne = new BigInt, 52 | bigOne.digits[0] = 1 53 | } 54 | setMaxDigits(20); 55 | function BigInt(i) { 56 | this.digits = "boolean" == typeof i && 1 == i ? null : ZERO_ARRAY.slice(0), 57 | this.isNeg = !1 58 | } 59 | function biFromDecimal(i) { 60 | for (var t, r = "-" == i.charAt(0), e = r ? 1 : 0; e < i.length && "0" == i.charAt(e); ) 61 | ++e; 62 | if (e == i.length) 63 | t = new BigInt; 64 | else { 65 | var g = i.length - e 66 | , s = g % dpl10; 67 | for (0 == s && (s = dpl10), 68 | t = biFromNumber(Number(i.substr(e, s))), 69 | e += s; e < i.length; ) 70 | t = biAdd(biMultiply(t, lr10), biFromNumber(Number(i.substr(e, dpl10)))), 71 | e += dpl10; 72 | t.isNeg = r 73 | } 74 | return t 75 | } 76 | function biCopy(i) { 77 | var t = new BigInt(!0); 78 | return t.digits = i.digits.slice(0), 79 | t.isNeg = i.isNeg, 80 | t 81 | } 82 | function biFromNumber(i) { 83 | var t = new BigInt; 84 | t.isNeg = 0 > i, 85 | i = Math.abs(i); 86 | for (var r = 0; i > 0; ) 87 | t.digits[r++] = i & maxDigitVal, 88 | i >>= biRadixBits; 89 | return t 90 | } 91 | function reverseStr(i) { 92 | for (var t = "", r = i.length - 1; r > -1; --r) 93 | t += i.charAt(r); 94 | return t 95 | } 96 | function biToString(i, t) { 97 | var r = new BigInt; 98 | r.digits[0] = t; 99 | for (var e = biDivideModulo(i, r), g = hexatrigesimalToChar[e[1].digits[0]]; 1 == biCompare(e[0], bigZero); ) 100 | e = biDivideModulo(e[0], r), 101 | digit = e[1].digits[0], 102 | g += hexatrigesimalToChar[e[1].digits[0]]; 103 | return (i.isNeg ? "-" : "") + reverseStr(g) 104 | } 105 | function biToDecimal(i) { 106 | var t = new BigInt; 107 | t.digits[0] = 10; 108 | for (var r = biDivideModulo(i, t), e = String(r[1].digits[0]); 1 == biCompare(r[0], bigZero); ) 109 | r = biDivideModulo(r[0], t), 110 | e += String(r[1].digits[0]); 111 | return (i.isNeg ? "-" : "") + reverseStr(e) 112 | } 113 | function digitToHex(t) { 114 | var r = 15 115 | , e = ""; 116 | for (i = 0; 4 > i; ++i) 117 | e += hexToChar[t & r], 118 | t >>>= 4; 119 | return reverseStr(e) 120 | } 121 | function biToHex(i) { 122 | for (var t = "", r = (biHighIndex(i), 123 | biHighIndex(i)); r > -1; --r) 124 | t += digitToHex(i.digits[r]); 125 | return t 126 | } 127 | function charToHex(i) { 128 | var t, r = 48, e = r + 9, g = 97, s = g + 25, n = 65, d = 90; 129 | return t = i >= r && e >= i ? i - r : i >= n && d >= i ? 10 + i - n : i >= g && s >= i ? 10 + i - g : 0 130 | } 131 | function hexToDigit(i) { 132 | for (var t = 0, r = Math.min(i.length, 4), e = 0; r > e; ++e) 133 | t <<= 4, 134 | t |= charToHex(i.charCodeAt(e)); 135 | return t 136 | } 137 | function biFromHex(i) { 138 | for (var t = new BigInt, r = i.length, e = r, g = 0; e > 0; e -= 4, 139 | ++g) 140 | t.digits[g] = hexToDigit(i.substr(Math.max(e - 4, 0), Math.min(e, 4))); 141 | return t 142 | } 143 | function biFromString(i, t) { 144 | var r = "-" == i.charAt(0) 145 | , e = r ? 1 : 0 146 | , g = new BigInt 147 | , s = new BigInt; 148 | s.digits[0] = 1; 149 | for (var n = i.length - 1; n >= e; n--) { 150 | var d = i.charCodeAt(n) 151 | , a = charToHex(d) 152 | , o = biMultiplyDigit(s, a); 153 | g = biAdd(g, o), 154 | s = biMultiplyDigit(s, t) 155 | } 156 | return g.isNeg = r, 157 | g 158 | } 159 | function biDump(i) { 160 | return (i.isNeg ? "-" : "") + i.digits.join(" ") 161 | } 162 | function biAdd(i, t) { 163 | var r; 164 | if (i.isNeg != t.isNeg) 165 | t.isNeg = !t.isNeg, 166 | r = biSubtract(i, t), 167 | t.isNeg = !t.isNeg; 168 | else { 169 | r = new BigInt; 170 | for (var e, g = 0, s = 0; s < i.digits.length; ++s) 171 | e = i.digits[s] + t.digits[s] + g, 172 | r.digits[s] = 65535 & e, 173 | g = Number(e >= biRadix); 174 | r.isNeg = i.isNeg 175 | } 176 | return r 177 | } 178 | function biSubtract(i, t) { 179 | var r; 180 | if (i.isNeg != t.isNeg) 181 | t.isNeg = !t.isNeg, 182 | r = biAdd(i, t), 183 | t.isNeg = !t.isNeg; 184 | else { 185 | r = new BigInt; 186 | var e, g; 187 | g = 0; 188 | for (var s = 0; s < i.digits.length; ++s) 189 | e = i.digits[s] - t.digits[s] + g, 190 | r.digits[s] = 65535 & e, 191 | r.digits[s] < 0 && (r.digits[s] += biRadix), 192 | g = 0 - Number(0 > e); 193 | if (-1 == g) { 194 | g = 0; 195 | for (var s = 0; s < i.digits.length; ++s) 196 | e = 0 - r.digits[s] + g, 197 | r.digits[s] = 65535 & e, 198 | r.digits[s] < 0 && (r.digits[s] += biRadix), 199 | g = 0 - Number(0 > e); 200 | r.isNeg = !i.isNeg 201 | } else 202 | r.isNeg = i.isNeg 203 | } 204 | return r 205 | } 206 | var biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998, maxDigits, ZERO_ARRAY, bigZero, bigOne; 207 | function biHighIndex(i) { 208 | for (var t = i.digits.length - 1; t > 0 && 0 == i.digits[t]; ) 209 | --t; 210 | return t 211 | } 212 | function biNumBits(i) { 213 | var t, r = biHighIndex(i), e = i.digits[r], g = (r + 1) * bitsPerDigit; 214 | for (t = g; t > g - bitsPerDigit && 0 == (32768 & e); --t) 215 | e <<= 1; 216 | return t 217 | } 218 | function biMultiply(i, t) { 219 | for (var r, e, g, s = new BigInt, n = biHighIndex(i), d = biHighIndex(t), a = 0; d >= a; ++a) { 220 | for (r = 0, 221 | g = a, 222 | j = 0; n >= j; ++j, 223 | ++g) 224 | e = s.digits[g] + i.digits[j] * t.digits[a] + r, 225 | s.digits[g] = e & maxDigitVal, 226 | r = e >>> biRadixBits; 227 | s.digits[a + n + 1] = r 228 | } 229 | return s.isNeg = i.isNeg != t.isNeg, 230 | s 231 | } 232 | function biMultiplyDigit(i, t) { 233 | var r, e, g; 234 | result = new BigInt, 235 | r = biHighIndex(i), 236 | e = 0; 237 | for (var s = 0; r >= s; ++s) 238 | g = result.digits[s] + i.digits[s] * t + e, 239 | result.digits[s] = g & maxDigitVal, 240 | e = g >>> biRadixBits; 241 | return result.digits[1 + r] = e, 242 | result 243 | } 244 | function arrayCopy(i, t, r, e, g) { 245 | for (var s = Math.min(t + g, i.length), n = t, d = e; s > n; ++n, 246 | ++d) 247 | r[d] = i[n] 248 | } 249 | function biShiftLeft(i, t) { 250 | var r = Math.floor(t / bitsPerDigit) 251 | , e = new BigInt; 252 | arrayCopy(i.digits, 0, e.digits, r, e.digits.length - r); 253 | for (var g = t % bitsPerDigit, s = bitsPerDigit - g, n = e.digits.length - 1, d = n - 1; n > 0; --n, 254 | --d) 255 | e.digits[n] = e.digits[n] << g & maxDigitVal | (e.digits[d] & highBitMasks[g]) >>> s; 256 | return e.digits[0] = e.digits[n] << g & maxDigitVal, 257 | e.isNeg = i.isNeg, 258 | e 259 | } 260 | var dpl10 = 15 261 | , lr10 = biFromNumber(1e15) 262 | , hexatrigesimalToChar = new Array("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") 263 | , hexToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f") 264 | , highBitMasks = new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535) 265 | , lowBitMasks = new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535); 266 | function biShiftRight(i, t) { 267 | var r = Math.floor(t / bitsPerDigit) 268 | , e = new BigInt; 269 | arrayCopy(i.digits, r, e.digits, 0, i.digits.length - r); 270 | for (var g = t % bitsPerDigit, s = bitsPerDigit - g, n = 0, d = n + 1; n < e.digits.length - 1; ++n, 271 | ++d) 272 | e.digits[n] = e.digits[n] >>> g | (e.digits[d] & lowBitMasks[g]) << s; 273 | return e.digits[e.digits.length - 1] >>>= g, 274 | e.isNeg = i.isNeg, 275 | e 276 | } 277 | function biMultiplyByRadixPower(i, t) { 278 | var r = new BigInt; 279 | return arrayCopy(i.digits, 0, r.digits, t, r.digits.length - t), 280 | r 281 | } 282 | function biDivideByRadixPower(i, t) { 283 | var r = new BigInt; 284 | return arrayCopy(i.digits, t, r.digits, 0, r.digits.length - t), 285 | r 286 | } 287 | function biModuloByRadixPower(i, t) { 288 | var r = new BigInt; 289 | return arrayCopy(i.digits, 0, r.digits, 0, t), 290 | r 291 | } 292 | function biCompare(i, t) { 293 | if (i.isNeg != t.isNeg) 294 | return 1 - 2 * Number(i.isNeg); 295 | for (var r = i.digits.length - 1; r >= 0; --r) 296 | if (i.digits[r] != t.digits[r]) 297 | return i.isNeg ? 1 - 2 * Number(i.digits[r] > t.digits[r]) : 1 - 2 * Number(i.digits[r] < t.digits[r]); 298 | return 0 299 | } 300 | function biDivideModulo(i, t) { 301 | var r, e, g = biNumBits(i), s = biNumBits(t), n = t.isNeg; 302 | if (s > g) 303 | return i.isNeg ? (r = biCopy(bigOne), 304 | r.isNeg = !t.isNeg, 305 | i.isNeg = !1, 306 | t.isNeg = !1, 307 | e = biSubtract(t, i), 308 | i.isNeg = !0, 309 | t.isNeg = n) : (r = new BigInt, 310 | e = biCopy(i)), 311 | new Array(r,e); 312 | r = new BigInt, 313 | e = i; 314 | for (var d = Math.ceil(s / bitsPerDigit) - 1, a = 0; t.digits[d] < biHalfRadix; ) 315 | t = biShiftLeft(t, 1), 316 | ++a, 317 | ++s, 318 | d = Math.ceil(s / bitsPerDigit) - 1; 319 | e = biShiftLeft(e, a), 320 | g += a; 321 | for (var o = Math.ceil(g / bitsPerDigit) - 1, b = biMultiplyByRadixPower(t, o - d); -1 != biCompare(e, b); ) 322 | ++r.digits[o - d], 323 | e = biSubtract(e, b); 324 | for (var u = o; u > d; --u) { 325 | var l = u >= e.digits.length ? 0 : e.digits[u] 326 | , h = u - 1 >= e.digits.length ? 0 : e.digits[u - 1] 327 | , f = u - 2 >= e.digits.length ? 0 : e.digits[u - 2] 328 | , x = d >= t.digits.length ? 0 : t.digits[d] 329 | , c = d - 1 >= t.digits.length ? 0 : t.digits[d - 1]; 330 | r.digits[u - d - 1] = l == x ? maxDigitVal : Math.floor((l * biRadix + h) / x); 331 | for (var m = r.digits[u - d - 1] * (x * biRadix + c), v = l * biRadixSquared + (h * biRadix + f); m > v; ) 332 | --r.digits[u - d - 1], 333 | m = r.digits[u - d - 1] * (x * biRadix | c), 334 | v = l * biRadix * biRadix + (h * biRadix + f); 335 | b = biMultiplyByRadixPower(t, u - d - 1), 336 | e = biSubtract(e, biMultiplyDigit(b, r.digits[u - d - 1])), 337 | e.isNeg && (e = biAdd(e, b), 338 | --r.digits[u - d - 1]) 339 | } 340 | return e = biShiftRight(e, a), 341 | r.isNeg = i.isNeg != n, 342 | i.isNeg && (r = n ? biAdd(r, bigOne) : biSubtract(r, bigOne), 343 | t = biShiftRight(t, a), 344 | e = biSubtract(t, e)), 345 | 0 == e.digits[0] && 0 == biHighIndex(e) && (e.isNeg = !1), 346 | new Array(r,e) 347 | } 348 | function biDivide(i, t) { 349 | return biDivideModulo(i, t)[0] 350 | } 351 | function biModulo(i, t) { 352 | return biDivideModulo(i, t)[1] 353 | } 354 | function biMultiplyMod(i, t, r) { 355 | return biModulo(biMultiply(i, t), r) 356 | } 357 | function biPow(i, t) { 358 | for (var r = bigOne, e = i; ; ) { 359 | if (0 != (1 & t) && (r = biMultiply(r, e)), 360 | t >>= 1, 361 | 0 == t) 362 | break; 363 | e = biMultiply(e, e) 364 | } 365 | return r 366 | } 367 | function biPowMod(i, t, r) { 368 | for (var e = bigOne, g = i, s = t; ; ) { 369 | if (0 != (1 & s.digits[0]) && (e = biMultiplyMod(e, g, r)), 370 | s = biShiftRight(s, 1), 371 | 0 == s.digits[0] && 0 == biHighIndex(s)) 372 | break; 373 | g = biMultiplyMod(g, g, r) 374 | } 375 | return e 376 | } 377 | function RSAKeyPair(i, t, r) { 378 | this.e = biFromHex(i), 379 | this.d = biFromHex(t), 380 | this.m = biFromHex(r), 381 | this.chunkSize = 2 * biHighIndex(this.m), 382 | this.radix = 16, 383 | this.barrett = new BarrettMu(this.m) 384 | } 385 | function twoDigit(i) { 386 | return (10 > i ? "0" : "") + String(i) 387 | } 388 | function encryptedString(i, t) { 389 | for (var r = new Array, e = t.length, g = 0; e > g; ) 390 | r[g] = t.charCodeAt(g), 391 | g++; 392 | for (; r.length % i.chunkSize != 0; ) 393 | r[g++] = 0; 394 | var s, n, d, a = r.length, o = ""; 395 | for (g = 0; a > g; g += i.chunkSize) { 396 | for (d = new BigInt, 397 | s = 0, 398 | n = g; n < g + i.chunkSize; ++s) 399 | d.digits[s] = r[n++], 400 | d.digits[s] += r[n++] << 8; 401 | var b = i.barrett.powMod(d, i.e) 402 | , u = 16 == i.radix ? biToHex(b) : biToString(b, i.radix); 403 | o += u + " " 404 | } 405 | return o.substring(0, o.length - 1) 406 | } 407 | function decryptedString(i, t) { 408 | var r, e, g, s = t.split(" "), n = ""; 409 | for (r = 0; r < s.length; ++r) { 410 | var d; 411 | for (d = 16 == i.radix ? biFromHex(s[r]) : biFromString(s[r], i.radix), 412 | g = i.barrett.powMod(d, i.d), 413 | e = 0; e <= biHighIndex(g); ++e) 414 | n += String.fromCharCode(255 & g.digits[e], g.digits[e] >> 8) 415 | } 416 | return 0 == n.charCodeAt(n.length - 1) && (n = n.substring(0, n.length - 1)), 417 | n 418 | } 419 | function getPwd(pwd) { 420 | var serverTime = "6ba5e50d6b"; 421 | pwd = _SBCtoDBC(pwd) + serverTime 422 | var rsa = "B3C61EBBA4659C4CE3639287EE871F1F48F7930EA977991C7AFE3CC442FEA49643212E7D570C853F368065CC57A2014666DA8AE7D493FD47D171C0D894EEE3ED7F99F6798B7FFD7B5873227038AD23E3197631A8CB642213B9F27D4901AB0D92BFA27542AE890855396ED92775255C977F5C302F1E7ED4B1E369C12CB6B1822F"; 423 | setMaxDigits(131); 424 | var u = new RSAKeyPair("10001", "", rsa); 425 | return encryptedString(u, pwd) 426 | }; 427 | function _SBCtoDBC(e) { 428 | var t = ""; 429 | if (e) { 430 | for (var s = e.length, 431 | a = 0; s > a; a++) { 432 | var n = e.charCodeAt(a); 433 | n = n >= 65281 && 65374 >= n ? n - 65248 : n, 434 | n = 12288 == n ? 32 : n, 435 | t += String.fromCharCode(n) 436 | } 437 | return t 438 | } 439 | } -------------------------------------------------------------------------------- /25-5173(MD5难).js: -------------------------------------------------------------------------------- 1 | /*begin 2 | 2017-06-06 15:18:44 By wd@5173.com*/ 3 | var hexcase=0,b64pad="",chrsz=8;function hex_md5(b){return binl2hex(core_md5(str2binl(b),b.length*chrsz))}function b64_md5(b){return binl2b64(core_md5(str2binl(b),b.length*chrsz))}function str_md5(b){return binl2str(core_md5(str2binl(b),b.length*chrsz))}function hex_hmac_md5(b,a){return binl2hex(core_hmac_md5(b,a))}function b64_hmac_md5(b,a){return binl2b64(core_hmac_md5(b,a))}function str_hmac_md5(b,a){return binl2str(core_hmac_md5(b,a))} 4 | function md5_vm_test(){return hex_md5("abc")=="900150983cd24fb0d6963f7d28e17f72"} 5 | function core_md5(b,a){b[a>>5]|=128<>>9<<4)+14]=a;a=1732584193;for(var c=-271733879,d=-1732584194,e=271733878,f=0;f16)c=core_md5(c,b.length*chrsz);var d=Array(16);b=Array(16);for(var e=0;e<16;e++){d[e]=c[e]^909522486;b[e]=c[e]^1549556828}a=core_md5(d.concat(str2binl(a)),512+a.length*chrsz);return core_md5(b.concat(a),640)}function safe_add(b,a){var c=(b&65535)+(a&65535);return(b>>16)+(a>>16)+(c>>16)<<16|c&65535} 12 | function bit_rol(b,a){return b<>>32-a}function str2binl(b){for(var a=Array(),c=(1<>5]|=(b.charCodeAt(d/chrsz)&c)<>5]>>>d%32&c);return a}function binl2hex(b){for(var a=hexcase?"0123456789ABCDEF":"0123456789abcdef",c="",d=0;d>2]>>d%4*8+4&15)+a.charAt(b[d>>2]>>d%4*8&15);return c} 13 | function binl2b64(b){for(var a="",c=0;c>2]>>8*(c%4)&255)<<16|(b[c+1>>2]>>8*((c+1)%4)&255)<<8|b[c+2>>2]>>8*((c+2)%4)&255,e=0;e<4;e++)a+=c*8+e*6>b.length*32?b64pad:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(d>>6*(3-e)&63);return a}; 14 | 15 | function getPwd(pwd){ 16 | return hex_md5(hex_md5(pwd).substr(8, 16) + "tobq5k"); 17 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JS Decryption Test 2 | 3 | #### 提供大陆主流网站JS登录加密的解密例子(适合爬虫模拟登录) 4 | 5 | 本项目示范例子都是经过本人测试通过,部分搜集于网络,网站若更新不保证能用。 6 | 7 | ## 目前例子如下: 8 | 9 | - 中关村 10 | 11 | - 逗游 12 | 13 | - 博客园 14 | 15 | - 37游戏 16 | 17 | - 188游戏中心 18 | 19 | - 立德金融 20 | 21 | - 民投金服 22 | 23 | - 同花顺 24 | 25 | - 金融街 26 | 27 | - 4366 28 | 29 | - 哔哩哔哩 30 | 31 | - 中国移动 32 | 33 | - shop99 34 | 35 | - 连载阅读 36 | 37 | - 国美WAP端 38 | 39 | - 京东 40 | 41 | - 58同城 42 | 43 | - 拉钩 44 | 45 | - 起点 46 | 47 | - 滴滴打车 48 | 49 | - 网易博客 50 | 51 | - 手机百度 52 | 53 | - 5173 54 | 55 | - 懒人听书 56 | 57 | - 阿里邮箱 58 | 59 | - 虾米 60 | 61 | - 唯品会 62 | 63 | - 汽车之家 64 | 65 | - 爱卡汽车 66 | 67 | - 酷狗 68 | 69 | - 搜狐 70 | 71 | - 微信公众号 72 | 73 | - 楚楚街 74 | 75 | ------ 76 | 77 | 经过分析目前采用RSA非对称加密的网站较多,大部分加密大同小异,可以直接套用.使用本项目的JS代码可以先用我提供的**鬼鬼 JS调试工具**调试再进行使用. 78 | 79 | 80 | 81 | #### 部分定义函数说明: 82 | 83 | 84 | navigator 浏览器对象(包含浏览器UA 厂商版本等等) 85 | var navigator = {};//定义为空对象 86 | 87 | window 浏览器里面的全局对象 88 | var window = this; 89 | 90 | #### 快速寻找网页JS加密小技巧: 91 | 92 | 93 | - (1)先打开浏览器F12,直接搜索参数 94 | 95 | pwd= 96 | pwd = 97 | pwd: 98 | pwd : 99 | 100 | - (2)密码框右键检查查看id和name,再进行搜寻,大部分是在ajax提交那里可以找到 101 | 102 | - (3)实用技巧: 103 | 104 | - 1 过滤掉css img文件 105 | - 2 有些是JQuery文件,注意查看头部是否有版本声明 106 | - 3 登录后有跳转页面,注意返回之前页面搜索 107 | - 4 password = 优先搜索这个 108 | - 5 location.protocol 一般就是指"http:",常见于rsa算法 109 | - 6 要特别注意RSA公钥是从文件直接定义的还是传进来的 110 | - 7 navigator.userAgent相关的可以先调试查到值后直接替换掉就行了 111 | - 8 有些登陆是用的框架,先右键查看框架源代码能省很多功夫 112 | - 9 找不到某些属性值时,优先找请求包里面的返回数据,没有的时候再找html源码 113 | 114 | #### 常用加密方式: 115 | 116 | **md5**: 117 | 调用方式:hex_md5("abc") 118 | 119 | **sha1**: 120 | 调用方式:hex_sha1("abc") 121 | 122 | **RSA**: 123 | - 1、p和q 是不相等的,足够大的两个质数。 p和q是保密的 124 | - 2、n = p*q n是公开的 125 | - 3、f(n) = (p-1)*(q-1) 126 | - 4、e 是和f(n)互质的质数 127 | - 5、计算参数d 128 | - 6、经过上面5步计算得到公钥KU=(e,n) 私钥KR=(d,n) 129 | - RSA三步骤 : 130 | - 1:初始化 n = new JSEncrypt; 131 | - 2:设置公钥 n.setPublicKey(r); 132 | - 3:进行加密 var e = n.encrypt($("#input1").val()) 133 | 134 | ##### RSA加密三步骤示例代码: 135 | 136 | ```javascript 137 | function getPwd(pwd){ 138 | 139 | var key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcV30OSW6Bd8uWyoUzajb7Rwe7NH9J8czQZSgGv9LBk0QZevURdhbME0GbCHS79mOP3+/KgvYZR5NakGd/ZGcagxhoCCY6sDYKA5iTQaXCbg5dhpfviWnj3ck0iGIVCf26QaquJttWsHEU3C0lwkJzGDTC0QjPnV4HwgDd70BcuwIDAQAB"; 140 | 141 | var encrypt = new JSEncrypt; 142 | 143 | encrypt.setPublicKey(key); 144 | 145 | return encrypt.encrypt(pwd); 146 | 147 | } 148 | ``` 149 | -------------------------------------------------------------------------------- /SHA1.js: -------------------------------------------------------------------------------- 1 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 2 | /* SHA-1 implementation in JavaScript | (c) Chris Veness 2002-2010 | www.movable-type.co.uk */ 3 | /* - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html */ 4 | /* http://csrc.nist.gov/groups/ST/toolkit/examples.html */ 5 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 6 | 7 | var Sha1 = {}; // Sha1 namespace 8 | 9 | /** 10 | * Generates SHA-1 hash of string 11 | * 12 | * @param {String} msg String to be hashed 13 | * @param {Boolean} [utf8encode=true] Encode msg as UTF-8 before generating hash 14 | * @returns {String} Hash of msg as hex character string 15 | */ 16 | Sha1.hash = function(msg, utf8encode) { 17 | utf8encode = (typeof utf8encode == 'undefined') ? true : utf8encode; 18 | 19 | // convert string to UTF-8, as SHA only deals with byte-streams 20 | if (utf8encode) msg = Utf8.encode(msg); 21 | 22 | // constants [§4.2.1] 23 | var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; 24 | 25 | // PREPROCESSING 26 | 27 | msg += String.fromCharCode(0x80); // add trailing '1' bit (+ 0's padding) to string [§5.1.1] 28 | 29 | // convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1] 30 | var l = msg.length/4 + 2; // length (in 32-bit integers) of msg + ‘1’ + appended length 31 | var N = Math.ceil(l/16); // number of 16-integer-blocks required to hold 'l' ints 32 | var M = new Array(N); 33 | 34 | for (var i=0; i>> 32, but since JS converts 43 | // bitwise-op args to 32 bits, we need to simulate this by arithmetic operators 44 | M[N-1][14] = ((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14]) 45 | M[N-1][15] = ((msg.length-1)*8) & 0xffffffff; 46 | 47 | // set initial hash value [§5.3.1] 48 | var H0 = 0x67452301; 49 | var H1 = 0xefcdab89; 50 | var H2 = 0x98badcfe; 51 | var H3 = 0x10325476; 52 | var H4 = 0xc3d2e1f0; 53 | 54 | // HASH COMPUTATION [§6.1.2] 55 | 56 | var W = new Array(80); var a, b, c, d, e; 57 | for (var i=0; i>>(32-n)); 106 | } 107 | 108 | // 109 | // hexadecimal representation of a number 110 | // (note toString(16) is implementation-dependant, and 111 | // in IE returns signed numbers when used on full words) 112 | // 113 | Sha1.toHexStr = function(n) { 114 | var s="", v; 115 | for (var i=7; i>=0; i--) { v = (n>>>(i*4)) & 0xf; s += v.toString(16); } 116 | return s; 117 | } 118 | 119 | 120 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 121 | /* Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple */ 122 | /* single-byte character encoding (c) Chris Veness 2002-2010 */ 123 | /* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ 124 | 125 | var Utf8 = {}; // Utf8 namespace 126 | 127 | /** 128 | * Encode multi-byte Unicode string into utf-8 multiple single-byte characters 129 | * (BMP / basic multilingual plane only) 130 | * 131 | * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars 132 | * 133 | * @param {String} strUni Unicode string to be encoded as UTF-8 134 | * @returns {String} encoded string 135 | */ 136 | Utf8.encode = function(strUni) { 137 | // use regular expressions & String.replace callback function for better efficiency 138 | // than procedural approaches 139 | var strUtf = strUni.replace( 140 | /[\u0080-\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz 141 | function(c) { 142 | var cc = c.charCodeAt(0); 143 | return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); } 144 | ); 145 | strUtf = strUtf.replace( 146 | /[\u0800-\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz 147 | function(c) { 148 | var cc = c.charCodeAt(0); 149 | return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); } 150 | ); 151 | return strUtf; 152 | } 153 | 154 | /** 155 | * Decode utf-8 encoded string back into multi-byte Unicode characters 156 | * 157 | * @param {String} strUtf UTF-8 string to be decoded back to Unicode 158 | * @returns {String} decoded string 159 | */ 160 | Utf8.decode = function(strUtf) { 161 | // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char! 162 | var strUni = strUtf.replace( 163 | /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars 164 | function(c) { // (note parentheses for precence) 165 | var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f); 166 | return String.fromCharCode(cc); } 167 | ); 168 | strUni = strUni.replace( 169 | /[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars 170 | function(c) { // (note parentheses for precence) 171 | var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f; 172 | return String.fromCharCode(cc); } 173 | ); 174 | return strUni; 175 | } 176 | 177 | 178 | function getPassword(pwd){ 179 | //nonce和ts都是通过ajax的请求包获取等到的,然后下面经过了两层加密 180 | var nonce = "Dqz3ly4Fei"; 181 | var ts = 1525865605; 182 | pwd = Sha1.hash(pwd); 183 | pwd = Sha1.hash(nonce+ts+pwd); 184 | return pwd; 185 | } -------------------------------------------------------------------------------- /base64.js: -------------------------------------------------------------------------------- 1 | !function(a) { 2 | "use strict"; 3 | var b, c = a.Base64, d = "2.1.8", e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", f = function(a) { 4 | for (var b = {}, c = 0, d = a.length; d > c; c++) 5 | b[a.charAt(c)] = c; 6 | return b 7 | }(e), g = String.fromCharCode, h = function(a) { 8 | if (a.length < 2) { 9 | var b = a.charCodeAt(0); 10 | return 128 > b ? a : 2048 > b ? g(192 | b >>> 6) + g(128 | 63 & b) : g(224 | b >>> 12 & 15) + g(128 | b >>> 6 & 63) + g(128 | 63 & b) 11 | } 12 | var b = 65536 + 1024 * (a.charCodeAt(0) - 55296) + (a.charCodeAt(1) - 56320); 13 | return g(240 | b >>> 18 & 7) + g(128 | b >>> 12 & 63) + g(128 | b >>> 6 & 63) + g(128 | 63 & b) 14 | }, i = /[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g, j = function(a) { 15 | return a.replace(i, h) 16 | }, k = function(a) { 17 | var b = [0, 2, 1][a.length % 3] 18 | , c = a.charCodeAt(0) << 16 | (a.length > 1 ? a.charCodeAt(1) : 0) << 8 | (a.length > 2 ? a.charCodeAt(2) : 0) 19 | , d = [e.charAt(c >>> 18), e.charAt(c >>> 12 & 63), b >= 2 ? "=" : e.charAt(c >>> 6 & 63), b >= 1 ? "=" : e.charAt(63 & c)]; 20 | return d.join("") 21 | }, l = a.btoa ? function(b) { 22 | return a.btoa(b) 23 | } 24 | : function(a) { 25 | return a.replace(/[\s\S]{1,3}/g, k) 26 | } 27 | , m = b ? function(a) { 28 | return (a.constructor === b.constructor ? a : new b(a)).toString("base64") 29 | } 30 | : function(a) { 31 | return l(j(a)) 32 | } 33 | , n = function(a, b) { 34 | return b ? m(String(a)).replace(/[+\/]/g, function(a) { 35 | return "+" == a ? "-" : "_" 36 | }).replace(/=/g, "") : m(String(a)) 37 | }, o = function(a) { 38 | return n(a, !0) 39 | }, q = function(a) { 40 | switch (a.length) { 41 | case 4: 42 | var b = (7 & a.charCodeAt(0)) << 18 | (63 & a.charCodeAt(1)) << 12 | (63 & a.charCodeAt(2)) << 6 | 63 & a.charCodeAt(3) 43 | , c = b - 65536; 44 | return g((c >>> 10) + 55296) + g((1023 & c) + 56320); 45 | case 3: 46 | return g((15 & a.charCodeAt(0)) << 12 | (63 & a.charCodeAt(1)) << 6 | 63 & a.charCodeAt(2)); 47 | default: 48 | return g((31 & a.charCodeAt(0)) << 6 | 63 & a.charCodeAt(1)) 49 | } 50 | }, r = function(a) { 51 | return a.replace(p, q) 52 | }, s = function(a) { 53 | var b = a.length 54 | , c = b % 4 55 | , d = (b > 0 ? f[a.charAt(0)] << 18 : 0) | (b > 1 ? f[a.charAt(1)] << 12 : 0) | (b > 2 ? f[a.charAt(2)] << 6 : 0) | (b > 3 ? f[a.charAt(3)] : 0) 56 | , e = [g(d >>> 16), g(d >>> 8 & 255), g(255 & d)]; 57 | return e.length -= [0, 0, 2, 1][c], 58 | e.join("") 59 | }, t = a.atob ? function(b) { 60 | return a.atob(b) 61 | } 62 | : function(a) { 63 | return a.replace(/[\s\S]{1,4}/g, s) 64 | } 65 | , u = b ? function(a) { 66 | return (a.constructor === b.constructor ? a : new b(a,"base64")).toString() 67 | } 68 | : function(a) { 69 | return r(t(a)) 70 | } 71 | , v = function(a) { 72 | return u(String(a).replace(/[-_]/g, function(a) { 73 | return "-" == a ? "+" : "/" 74 | }).replace(/[^A-Za-z0-9\+\/]/g, "")) 75 | }, w = function() { 76 | var b = a.Base64; 77 | return a.Base64 = c, 78 | b 79 | }; 80 | if (a.Base64 = { 81 | VERSION: d, 82 | atob: t, 83 | btoa: l, 84 | fromBase64: v, 85 | toBase64: n, 86 | utob: j, 87 | encode: n, 88 | encodeURI: o, 89 | btou: r, 90 | decode: v, 91 | noConflict: w 92 | }, 93 | "function" == typeof Object.defineProperty) { 94 | var x = function(a) { 95 | return { 96 | value: a, 97 | enumerable: !1, 98 | writable: !0, 99 | configurable: !0 100 | } 101 | }; 102 | a.Base64.extendString = function() { 103 | Object.defineProperty(String.prototype, "fromBase64", x(function() { 104 | return v(this) 105 | })), 106 | Object.defineProperty(String.prototype, "toBase64", x(function(a) { 107 | return n(this, a) 108 | })), 109 | Object.defineProperty(String.prototype, "toBase64URI", x(function() { 110 | return n(this, !0) 111 | })) 112 | } 113 | } 114 | }(this); 115 | 116 | function base64(pwd) { 117 | return Base64.encode(pwd); 118 | } 119 | //Not hex_md5(hex_md5('pass')) For API 120 | -------------------------------------------------------------------------------- /md5.js: -------------------------------------------------------------------------------- 1 | /* 2 | CryptoJS v3.0.2 3 | code.google.com/p/crypto-js 4 | (c) 2009-2012 by Jeff Mott. All rights reserved. 5 | code.google.com/p/crypto-js/wiki/License 6 | */ 7 | var CryptoJS = CryptoJS || function(o, q) { 8 | var l = {} 9 | , m = l.lib = {} 10 | , n = m.Base = function() { 11 | function a() {} 12 | return { 13 | extend: function(e) { 14 | a.prototype = this; 15 | var c = new a; 16 | e && c.mixIn(e); 17 | c.$super = this; 18 | return c 19 | }, 20 | create: function() { 21 | var a = this.extend(); 22 | a.init.apply(a, arguments); 23 | return a 24 | }, 25 | init: function() {}, 26 | mixIn: function(a) { 27 | for (var c in a) 28 | a.hasOwnProperty(c) && (this[c] = a[c]); 29 | a.hasOwnProperty("toString") && (this.toString = a.toString) 30 | }, 31 | clone: function() { 32 | return this.$super.extend(this) 33 | } 34 | } 35 | }() 36 | , j = m.WordArray = n.extend({ 37 | init: function(a, e) { 38 | a = this.words = a || []; 39 | this.sigBytes = e != q ? e : 4 * a.length 40 | }, 41 | toString: function(a) { 42 | return (a || r).stringify(this) 43 | }, 44 | concat: function(a) { 45 | var e = this.words 46 | , c = a.words 47 | , d = this.sigBytes 48 | , a = a.sigBytes; 49 | this.clamp(); 50 | if (d % 4) 51 | for (var b = 0; b < a; b++) 52 | e[d + b >>> 2] |= (c[b >>> 2] >>> 24 - 8 * (b % 4) & 255) << 24 - 8 * ((d + b) % 4); 53 | else if (65535 < c.length) 54 | for (b = 0; b < a; b += 4) 55 | e[d + b >>> 2] = c[b >>> 2]; 56 | else 57 | e.push.apply(e, c); 58 | this.sigBytes += a; 59 | return this 60 | }, 61 | clamp: function() { 62 | var a = this.words 63 | , e = this.sigBytes; 64 | a[e >>> 2] &= 4294967295 << 32 - 8 * (e % 4); 65 | a.length = o.ceil(e / 4) 66 | }, 67 | clone: function() { 68 | var a = n.clone.call(this); 69 | a.words = this.words.slice(0); 70 | return a 71 | }, 72 | random: function(a) { 73 | for (var e = [], c = 0; c < a; c += 4) 74 | e.push(4294967296 * o.random() | 0); 75 | return j.create(e, a) 76 | } 77 | }) 78 | , k = l.enc = {} 79 | , r = k.Hex = { 80 | stringify: function(a) { 81 | for (var e = a.words, a = a.sigBytes, c = [], d = 0; d < a; d++) { 82 | var b = e[d >>> 2] >>> 24 - 8 * (d % 4) & 255; 83 | c.push((b >>> 4).toString(16)); 84 | c.push((b & 15).toString(16)) 85 | } 86 | return c.join("") 87 | }, 88 | parse: function(a) { 89 | for (var b = a.length, c = [], d = 0; d < b; d += 2) 90 | c[d >>> 3] |= parseInt(a.substr(d, 2), 16) << 24 - 4 * (d % 8); 91 | return j.create(c, b / 2) 92 | } 93 | } 94 | , p = k.Latin1 = { 95 | stringify: function(a) { 96 | for (var b = a.words, a = a.sigBytes, c = [], d = 0; d < a; d++) 97 | c.push(String.fromCharCode(b[d >>> 2] >>> 24 - 8 * (d % 4) & 255)); 98 | return c.join("") 99 | }, 100 | parse: function(a) { 101 | for (var b = a.length, c = [], d = 0; d < b; d++) 102 | c[d >>> 2] |= (a.charCodeAt(d) & 255) << 24 - 8 * (d % 4); 103 | return j.create(c, b) 104 | } 105 | } 106 | , h = k.Utf8 = { 107 | stringify: function(a) { 108 | try { 109 | return decodeURIComponent(escape(p.stringify(a))) 110 | } catch (b) { 111 | throw Error("Malformed UTF-8 data"); 112 | } 113 | }, 114 | parse: function(a) { 115 | return p.parse(unescape(encodeURIComponent(a))) 116 | } 117 | } 118 | , b = m.BufferedBlockAlgorithm = n.extend({ 119 | reset: function() { 120 | this._data = j.create(); 121 | this._nDataBytes = 0 122 | }, 123 | _append: function(a) { 124 | "string" == typeof a && (a = h.parse(a)); 125 | this._data.concat(a); 126 | this._nDataBytes += a.sigBytes 127 | }, 128 | _process: function(a) { 129 | var b = this._data 130 | , c = b.words 131 | , d = b.sigBytes 132 | , f = this.blockSize 133 | , i = d / (4 * f) 134 | , i = a ? o.ceil(i) : o.max((i | 0) - this._minBufferSize, 0) 135 | , a = i * f 136 | , d = o.min(4 * a, d); 137 | if (a) { 138 | for (var h = 0; h < a; h += f) 139 | this._doProcessBlock(c, h); 140 | h = c.splice(0, a); 141 | b.sigBytes -= d 142 | } 143 | return j.create(h, d) 144 | }, 145 | clone: function() { 146 | var a = n.clone.call(this); 147 | a._data = this._data.clone(); 148 | return a 149 | }, 150 | _minBufferSize: 0 151 | }); 152 | m.Hasher = b.extend({ 153 | init: function() { 154 | this.reset() 155 | }, 156 | reset: function() { 157 | b.reset.call(this); 158 | this._doReset() 159 | }, 160 | update: function(a) { 161 | this._append(a); 162 | this._process(); 163 | return this 164 | }, 165 | finalize: function(a) { 166 | a && this._append(a); 167 | this._doFinalize(); 168 | return this._hash 169 | }, 170 | clone: function() { 171 | var a = b.clone.call(this); 172 | a._hash = this._hash.clone(); 173 | return a 174 | }, 175 | blockSize: 16, 176 | _createHelper: function(a) { 177 | return function(b, c) { 178 | return a.create(c).finalize(b) 179 | } 180 | }, 181 | _createHmacHelper: function(a) { 182 | return function(b, c) { 183 | return f.HMAC.create(a, c).finalize(b) 184 | } 185 | } 186 | }); 187 | var f = l.algo = {}; 188 | return l 189 | }(Math); 190 | (function(o) { 191 | function q(b, f, a, e, c, d, g) { 192 | b = b + (f & a | ~f & e) + c + g; 193 | return (b << d | b >>> 32 - d) + f 194 | } 195 | function l(b, f, a, e, c, d, g) { 196 | b = b + (f & e | a & ~e) + c + g; 197 | return (b << d | b >>> 32 - d) + f 198 | } 199 | function m(b, f, a, e, c, d, g) { 200 | b = b + (f ^ a ^ e) + c + g; 201 | return (b << d | b >>> 32 - d) + f 202 | } 203 | function n(b, f, a, e, c, d, g) { 204 | b = b + (a ^ (f | ~e)) + c + g; 205 | return (b << d | b >>> 32 - d) + f 206 | } 207 | var j = CryptoJS 208 | , k = j.lib 209 | , r = k.WordArray 210 | , k = k.Hasher 211 | , p = j.algo 212 | , h = []; 213 | (function() { 214 | for (var b = 0; 64 > b; b++) 215 | h[b] = 4294967296 * o.abs(o.sin(b + 1)) | 0 216 | } 217 | )(); 218 | p = p.MD5 = k.extend({ 219 | _doReset: function() { 220 | this._hash = r.create([1732584193, 4023233417, 2562383102, 271733878]) 221 | }, 222 | _doProcessBlock: function(b, f) { 223 | for (var a = 0; 16 > a; a++) { 224 | var e = f + a 225 | , c = b[e]; 226 | b[e] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360 227 | } 228 | for (var e = this._hash.words, c = e[0], d = e[1], g = e[2], i = e[3], a = 0; 64 > a; a += 4) 229 | 16 > a ? (c = q(c, d, g, i, b[f + a], 7, h[a]), 230 | i = q(i, c, d, g, b[f + a + 1], 12, h[a + 1]), 231 | g = q(g, i, c, d, b[f + a + 2], 17, h[a + 2]), 232 | d = q(d, g, i, c, b[f + a + 3], 22, h[a + 3])) : 32 > a ? (c = l(c, d, g, i, b[f + (a + 1) % 16], 5, h[a]), 233 | i = l(i, c, d, g, b[f + (a + 6) % 16], 9, h[a + 1]), 234 | g = l(g, i, c, d, b[f + (a + 11) % 16], 14, h[a + 2]), 235 | d = l(d, g, i, c, b[f + a % 16], 20, h[a + 3])) : 48 > a ? (c = m(c, d, g, i, b[f + (3 * a + 5) % 16], 4, h[a]), 236 | i = m(i, c, d, g, b[f + (3 * a + 8) % 16], 11, h[a + 1]), 237 | g = m(g, i, c, d, b[f + (3 * a + 11) % 16], 16, h[a + 2]), 238 | d = m(d, g, i, c, b[f + (3 * a + 14) % 16], 23, h[a + 3])) : (c = n(c, d, g, i, b[f + 3 * a % 16], 6, h[a]), 239 | i = n(i, c, d, g, b[f + (3 * a + 7) % 16], 10, h[a + 1]), 240 | g = n(g, i, c, d, b[f + (3 * a + 14) % 16], 15, h[a + 2]), 241 | d = n(d, g, i, c, b[f + (3 * a + 5) % 16], 21, h[a + 3])); 242 | e[0] = e[0] + c | 0; 243 | e[1] = e[1] + d | 0; 244 | e[2] = e[2] + g | 0; 245 | e[3] = e[3] + i | 0 246 | }, 247 | _doFinalize: function() { 248 | var b = this._data 249 | , f = b.words 250 | , a = 8 * this._nDataBytes 251 | , e = 8 * b.sigBytes; 252 | f[e >>> 5] |= 128 << 24 - e % 32; 253 | f[(e + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360; 254 | b.sigBytes = 4 * (f.length + 1); 255 | this._process(); 256 | b = this._hash.words; 257 | for (f = 0; 4 > f; f++) 258 | a = b[f], 259 | b[f] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360 260 | } 261 | }); 262 | j.MD5 = k._createHelper(p); 263 | j.HmacMD5 = k._createHmacHelper(p) 264 | } 265 | )(Math); 266 | 267 | function getPwd(pwd){ 268 | return CryptoJS.MD5(pwd+"zol") + ''; 269 | } -------------------------------------------------------------------------------- /鬼鬼JS调试工具7.0/test.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OFZFZS/JS-Decryption/ecbe794d44fc80fac7f5a88b03eb802c60481a06/鬼鬼JS调试工具7.0/test.html -------------------------------------------------------------------------------- /鬼鬼JS调试工具7.0/v8.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OFZFZS/JS-Decryption/ecbe794d44fc80fac7f5a88b03eb802c60481a06/鬼鬼JS调试工具7.0/v8.dll -------------------------------------------------------------------------------- /鬼鬼JS调试工具7.0/v8js.ec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OFZFZS/JS-Decryption/ecbe794d44fc80fac7f5a88b03eb802c60481a06/鬼鬼JS调试工具7.0/v8js.ec -------------------------------------------------------------------------------- /鬼鬼JS调试工具7.0/鬼鬼JS调试工具7.0.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OFZFZS/JS-Decryption/ecbe794d44fc80fac7f5a88b03eb802c60481a06/鬼鬼JS调试工具7.0/鬼鬼JS调试工具7.0.exe --------------------------------------------------------------------------------