├── .gitignore
├── .idea
└── vcs.xml
├── README.md
├── 京东2018-12-13
├── js.txt
└── login.py
├── 京东登陆
├── js.txt
└── login.py
├── 微信公众号登陆加密
├── js.txt
└── login.py
├── 新浪微博登陆2018-12-11
├── js.txt
└── sinalogin.py
├── 网易云评论请求加密2018-12-12
├── js.txt
└── wangyicomment.py
├── 腾讯企鹅媒体登陆2018-12-8
├── js.txt
└── login-om.qq.com.py
└── 英领
├── .idea
├── misc.xml
├── modules.xml
├── workspace.xml
└── 英领.iml
└── linkedin.py
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by .ignore support plugin (hsz.mobi)
2 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Python-Crypto
2 | 记录平时做js加密解密算法
3 | ---
4 | ## 新浪微博登陆
5 | 测试的是手机号可以正常登陆,还没遇到验证码问题,后面遇上再加
6 | post请求之后会被重定向两次才能得到登陆用户信息,发送post请求后还需要正则匹配两次重定向url
7 | 注意请求返回的编码格式post请求后返回编码是GBK,后面还会返回GB2312
8 | ### 加密方式:RSA(非对称加密方式)
9 | 登录前先get请求返回携带有token、pubkey、raskv、servertime等信息的dict字符串,包含在js中需要提取转换
10 | 需要破解的参数是su和sp,sp是密码
11 | su:是通过封装了RSA源码的一个对象sinaSSOEncoder的base64编码用户名得到的
12 | sp:加密的密码,通过创建sinaSSOEncoder加密对象,公钥是上面返回的pubkey,偏移量"10001"
13 | 加密内容是servertime + "\t" + nonce + "\n" + pw
14 | servertime:上面get请求返回的
15 | nonce:上面get请求返回的
16 | pw:输入的密码
17 | ## 腾讯企鹅媒体
18 | 测试的是邮箱登陆,无验证码问题,因为账号问题可能在登陆后被重定向到身份验证页面
19 | 注意在post请求时需要带上cookie,并且cookie中有个参数是登录前Ajax get请求的含有token信息的返回cookie
20 | ### 加密方式:MD5双重加密(信息摘要算法或签名算法)
21 | 登录前后台会get请求一次,返回含有token和salf等加密参数信息以及一个cookie,该cookie要加在post的请求中
22 | 加密形式:MD5(token + MD5(salt + pwd))双重加密
23 | ## 网易云获取评论请求参数加密
24 | 测试是无登陆状态下的请求加密,无登陆状态下csrf_token参数为空,在同一ip过度请求下降不会返回数据;在登陆状态下请求的url和未登录状态下的url是不一样的
25 | ### 加密方式AES+RSA
26 | 评论请求加密参数是两个:params、encSecKey,传入加密函数的参数是a,b,c,d+内部随机生成的16位参数i
27 | 其中a='"{"rid":"R_SO_4_371362","offset":"160","total":"false","limit":"20","csrf_token":"de097d5986487c4aefe9f52c65e43224"}"}'形式参数
28 | rid:歌曲id;
29 | offset:歌词页数计算公式(n-1)*20;
30 | total:在第一页是TRUE在其他是false;
31 | csrf_token:在登陆成功后再返回的cookie中可以找到,未登录时是空。
32 | b、c、d是固定的参数,由js内部定义的文字编码转码并并且得到的类似于
33 | {"色":"00e0b","流感":"509f6","这边":"259df","弱":"8642d","嘴 唇":"bc356","亲":"62901","开心":"477df"}-->色+嘴唇="00e0bbc356"
34 | bcd当做固定参数传入
35 | 其中内部随便变量i可以写死,那么encSecKey参数都是由固定参数生成的,可以当做固定参数使用
36 | params根据页数和歌曲参数的不同是变化的
37 | params:是内部方法AES CBC模式
38 | encSecKey:RSA加密
39 | ## 微信公众号密码加密
40 | 只分析了微信公众号登陆请求的post密码加密
41 | ### 加密方式MD5
42 | 加密方式比较简单,取密码的前16位进行MD5加密
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/京东2018-12-13/login.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import execjs
3 | from lxml import etree
4 |
5 | URL = "https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F%3Fcu%3Dtrue%26utm_source%3Dbaidu" \
6 | "-pinzhuan%26utm_medium%3Dcpc%26utm_campaign%3Dt_288551095_baidupinzhuan%26utm_term%3D0f3d30c8dba7459bb52f2eb5eb" \
7 | "a8ac7d_0_b4ece126b50f487280968f8ddba60aa8"
8 |
9 | session = requests.Session()
10 | with open("./js.txt", 'r', encoding='utf-8') as f: # 打开JS文件
11 | line = f.readline()
12 | htmlstr = ''
13 | while line:
14 | htmlstr = htmlstr + line
15 | line = f.readline()
16 | jsstr = htmlstr
17 | ctx = execjs.compile(jsstr) # 加载JS文件
18 |
19 |
20 | def getform(phone, pwd):
21 | response = session.get(URL)
22 | rp = etree.HTML(response.text)
23 | sa_token = rp.xpath('//input[@id="sa_token"]/@value')[0]
24 | uuid = rp.xpath('//input[@id="uuid"]/@value')[0]
25 | eid = rp.xpath('//input[@id="eid"]/@value')[0]
26 | sessionId = rp.xpath('//input[@id="sessionId"]/@value')[0]
27 | token = rp.xpath('//input[@id="token"]/@value')[0]
28 | loginType = rp.xpath('//input[@id="loginType"]/@value')[0]
29 | pubKey = rp.xpath('//input[@id="pubKey"]/@value')[0]
30 | slideAppId = rp.xpath('//input[@id="slideAppId"]/@value')[0]
31 | useSlideAuthCode = rp.xpath('//input[@id="useSlideAuthCode"]/@value')[0]
32 | loginname = phone
33 | pwd = ctx.call("getEntryptPwd", pubKey, pwd)
34 | seqSid = "271726271731661547"
35 | authcode = None # 服务器返回的时间戳,还需单独请求
36 | data = {
37 | "uuid": uuid,
38 | "eid": eid,
39 | "fp": sessionId,
40 | "_t": token,
41 | "loginType": loginType,
42 | "loginname": loginname,
43 | "nloginpwd": pwd,
44 | "authcode": authcode,
45 | "pubKey": pubKey,
46 | "sa_token": sa_token,
47 | "seqSid": seqSid,
48 | "useSlideAuthCode": useSlideAuthCode
49 | }
50 | return data
51 |
52 |
53 | if __name__ == '__main__':
54 | getform(18328496803, 666666)
--------------------------------------------------------------------------------
/京东登陆/login.py:
--------------------------------------------------------------------------------
1 | import requests
2 | import execjs
3 | from lxml import etree
4 |
5 | URL = "https://passport.jd.com/new/login.aspx?ReturnUrl=https%3A%2F%2Fwww.jd.com%2F%3Fcu%3Dtrue%26utm_source%3Dbaidu" \
6 | "-pinzhuan%26utm_medium%3Dcpc%26utm_campaign%3Dt_288551095_baidupinzhuan%26utm_term%3D0f3d30c8dba7459bb52f2eb5eb" \
7 | "a8ac7d_0_b4ece126b50f487280968f8ddba60aa8"
8 |
9 | session = requests.Session()
10 | with open("./js.txt", 'r', encoding='utf-8') as f: # 打开JS文件
11 | line = f.readline()
12 | htmlstr = ''
13 | while line:
14 | htmlstr = htmlstr + line
15 | line = f.readline()
16 | jsstr = htmlstr
17 | ctx = execjs.compile(jsstr) # 加载JS文件
18 |
19 |
20 | def getform(phone, pwd):
21 | response = session.get(URL)
22 | rp = etree.HTML(response.text)
23 | sa_token = rp.xpath('//input[@id="sa_token"]/@value')[0]
24 | uuid = rp.xpath('//input[@id="uuid"]/@value')[0]
25 | eid = rp.xpath('//input[@id="eid"]/@value')[0]
26 | sessionId = rp.xpath('//input[@id="sessionId"]/@value')[0]
27 | token = rp.xpath('//input[@id="token"]/@value')[0]
28 | loginType = rp.xpath('//input[@id="loginType"]/@value')[0]
29 | pubKey = rp.xpath('//input[@id="pubKey"]/@value')[0]
30 | slideAppId = rp.xpath('//input[@id="slideAppId"]/@value')[0]
31 | useSlideAuthCode = rp.xpath('//input[@id="useSlideAuthCode"]/@value')[0]
32 | loginname = phone
33 | pwd = ctx.call("getEntryptPwd", pubKey, pwd)
34 | seqSid = "271726271731661547"
35 | authcode = None # 服务器返回的时间戳,还需单独请求
36 | data = {
37 | "uuid": uuid,
38 | "eid": eid,
39 | "fp": sessionId,
40 | "_t": token,
41 | "loginType": loginType,
42 | "loginname": loginname,
43 | "nloginpwd": pwd,
44 | "authcode": authcode,
45 | "pubKey": pubKey,
46 | "sa_token": sa_token,
47 | "seqSid": seqSid,
48 | "useSlideAuthCode": useSlideAuthCode
49 | }
50 | return data
51 |
52 |
53 | if __name__ == '__main__':
54 | getform(18328496803, 666666)
--------------------------------------------------------------------------------
/微信公众号登陆加密/js.txt:
--------------------------------------------------------------------------------
1 | function e(n, r) {
2 | var t = (65535 & n) + (65535 & r);
3 | return (n >> 16) + (r >> 16) + (t >> 16) << 16 | 65535 & t
4 | }
5 | function u(n, r, t, u, o, c) {
6 | return e(function(n, r) {
7 | return n << r | n >>> 32 - r
8 | } (e(e(r, n), e(u, c)), o), t)
9 | }
10 | function o(n, r, t, e, o, c, f) {
11 | return u(r & t | ~r & e, n, r, o, c, f)
12 | }
13 | function c(n, r, t, e, o, c, f) {
14 | return u(r & e | t & ~e, n, r, o, c, f)
15 | }
16 | function f(n, r, t, e, o, c, f) {
17 | return u(r ^ t ^ e, n, r, o, c, f)
18 | }
19 | function i(n, r, t, e, o, c, f) {
20 | return u(t ^ (r | ~e), n, r, o, c, f)
21 | }
22 | function a(n, r) {
23 | n[r >> 5] |= 128 << r % 32,
24 | n[14 + (r + 64 >>> 9 << 4)] = r
25 | var t, u, a, h, d, g = 1732584193,
26 | l = -271733879,
27 | v = -1732584194,
28 | s = 271733878
29 | for (t = 0; t < n.length; t += 16) u = g,
30 | a = l,
31 | h = v,
32 | d = s,
33 | l = i(l = i(l = i(l = i(l = f(l = f(l = f(l = f(l = c(l = c(l = c(l = c(l = o(l = o(l = o(l = o(l, v = o(v, s = o(s, g = o(g, l, v, s, n[t], 7, -680876936), l, v, n[t + 1], 12, -389564586), g, l, n[t + 2], 17, 606105819), s, g, n[t + 3], 22, -1044525330), v = o(v, s = o(s, g = o(g, l, v, s, n[t + 4], 7, -176418897), l, v, n[t + 5], 12, 1200080426), g, l, n[t + 6], 17, -1473231341), s, g, n[t + 7], 22, -45705983), v = o(v, s = o(s, g = o(g, l, v, s, n[t + 8], 7, 1770035416), l, v, n[t + 9], 12, -1958414417), g, l, n[t + 10], 17, -42063), s, g, n[t + 11], 22, -1990404162), v = o(v, s = o(s, g = o(g, l, v, s, n[t + 12], 7, 1804603682), l, v, n[t + 13], 12, -40341101), g, l, n[t + 14], 17, -1502002290), s, g, n[t + 15], 22, 1236535329), v = c(v, s = c(s, g = c(g, l, v, s, n[t + 1], 5, -165796510), l, v, n[t + 6], 9, -1069501632), g, l, n[t + 11], 14, 643717713), s, g, n[t], 20, -373897302), v = c(v, s = c(s, g = c(g, l, v, s, n[t + 5], 5, -701558691), l, v, n[t + 10], 9, 38016083), g, l, n[t + 15], 14, -660478335), s, g, n[t + 4], 20, -405537848), v = c(v, s = c(s, g = c(g, l, v, s, n[t + 9], 5, 568446438), l, v, n[t + 14], 9, -1019803690), g, l, n[t + 3], 14, -187363961), s, g, n[t + 8], 20, 1163531501), v = c(v, s = c(s, g = c(g, l, v, s, n[t + 13], 5, -1444681467), l, v, n[t + 2], 9, -51403784), g, l, n[t + 7], 14, 1735328473), s, g, n[t + 12], 20, -1926607734), v = f(v, s = f(s, g = f(g, l, v, s, n[t + 5], 4, -378558), l, v, n[t + 8], 11, -2022574463), g, l, n[t + 11], 16, 1839030562), s, g, n[t + 14], 23, -35309556), v = f(v, s = f(s, g = f(g, l, v, s, n[t + 1], 4, -1530992060), l, v, n[t + 4], 11, 1272893353), g, l, n[t + 7], 16, -155497632), s, g, n[t + 10], 23, -1094730640), v = f(v, s = f(s, g = f(g, l, v, s, n[t + 13], 4, 681279174), l, v, n[t], 11, -358537222), g, l, n[t + 3], 16, -722521979), s, g, n[t + 6], 23, 76029189), v = f(v, s = f(s, g = f(g, l, v, s, n[t + 9], 4, -640364487), l, v, n[t + 12], 11, -421815835), g, l, n[t + 15], 16, 530742520), s, g, n[t + 2], 23, -995338651), v = i(v, s = i(s, g = i(g, l, v, s, n[t], 6, -198630844), l, v, n[t + 7], 10, 1126891415), g, l, n[t + 14], 15, -1416354905), s, g, n[t + 5], 21, -57434055), v = i(v, s = i(s, g = i(g, l, v, s, n[t + 12], 6, 1700485571), l, v, n[t + 3], 10, -1894986606), g, l, n[t + 10], 15, -1051523), s, g, n[t + 1], 21, -2054922799), v = i(v, s = i(s, g = i(g, l, v, s, n[t + 8], 6, 1873313359), l, v, n[t + 15], 10, -30611744), g, l, n[t + 6], 15, -1560198380), s, g, n[t + 13], 21, 1309151649), v = i(v, s = i(s, g = i(g, l, v, s, n[t + 4], 6, -145523070), l, v, n[t + 11], 10, -1120210379), g, l, n[t + 2], 15, 718787259), s, g, n[t + 9], 21, -343485551),
34 | g = e(g, u),
35 | l = e(l, a),
36 | v = e(v, h),
37 | s = e(s, d);
38 | return [g, l, v, s]
39 | }
40 | function h(n) {
41 | var r, t = ""
42 | for (r = 0; r < 32 * n.length; r += 8) t += String.fromCharCode(n[r >> 5] >>> r % 32 & 255) ;return t
43 | }
44 | function d(n) {
45 | var r, t = []
46 | for (t[(n.length >> 2) - 1] = void 0, r = 0; r < t.length; r += 1) t[r] = 0
47 | for (r = 0; r < 8 * n.length; r += 8) t[r >> 5] |= (255 & n.charCodeAt(r / 8)) << r % 32
48 | return t
49 | }
50 | function g(n) {
51 | var r, t, e = ""
52 | for (t = 0; t < n.length; t += 1) r = n.charCodeAt(t),
53 | e += "0123456789abcdef".charAt(r >>> 4 & 15) + "0123456789abcdef".charAt(15 & r);
54 | return e
55 | }
56 | function l(n) {
57 | return unescape(encodeURIComponent(n))
58 | }
59 | function v(n) {
60 | return function(n) {
61 | return h(a(d(n), 8 * n.length))
62 | } (l(n))
63 | }
64 | function s(n, r) {
65 | return function(n, r) {
66 | var t, e, u = d(n),
67 | o = [],
68 | c = []
69 | for (o[15] = c[15] = void 0, u.length > 16 && (u = a(u, 8 * n.length)), t = 0; t < 16; t += 1) o[t] = 909522486 ^ u[t],
70 | c[t] = 1549556828 ^ u[t]
71 | return e = a(o.concat(d(r)), 512 + 8 * r.length),
72 | h(a(c.concat(e), 640))
73 | } (l(n), l(r))
74 | }
75 |
76 | getpwd = function(n, r, t) {
77 | return r ? t ? s(r, n) : function(n, r) {
78 | return g(s(n, r))
79 | } (r, n) : t ? v(n) : function(n) {
80 | return g(v(n))
81 | } (n)
82 | }
--------------------------------------------------------------------------------
/微信公众号登陆加密/login.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | import requests
4 | import execjs
5 |
6 |
7 | with open("./js.txt", 'r', encoding='utf-8') as f: # 打开JS文件
8 | line = f.readline()
9 | htmlstr = ''
10 | while line:
11 | htmlstr = htmlstr + line
12 | line = f.readline()
13 | jsstr = htmlstr
14 | ctx = execjs.compile(jsstr) # 加载JS文件
15 |
16 |
17 | def getpwd(pwd):
18 | password = ctx.call("getpwd", pwd)
19 | return password
20 |
21 |
22 | def login(email, pwd):
23 | session = requests.Session()
24 | url = "https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin"
25 | password = getpwd(pwd)
26 | data = {
27 | "username": email,
28 | "pwd": password,
29 | "imgcode": "",
30 | "f": "json",
31 | "userlang": "zh_CN",
32 | "redirect_url": "",
33 | "token": "",
34 | "lang": "zh_CN",
35 | "ajax": "1"
36 | }
37 | rp = session.post(url, data=data)
38 |
39 |
40 | if __name__ == '__main__':
41 | login("2551513277@qq.com", "666666")
42 |
43 |
44 |
--------------------------------------------------------------------------------
/新浪微博登陆2018-12-11/js.txt:
--------------------------------------------------------------------------------
1 | var navigator = {};
2 | function SSOController() {
3 | var undefined;
4 | var me = this;
5 | var updateCookieTimer = null;
6 | var updateCookieTimeHardLimit = 1800;
7 | var cookieExpireTimeLength = 3600 * 24;
8 | var crossDomainForward = null;
9 | var crossDomainTimer = null;
10 | var crossDomainTime = 3;
11 | var autoLoginCallBack2 = null;
12 | var ssoCrosssDomainUrl = "http://login.sina.com.cn/sso/crossdomain.php";
13 | var ssoLoginUrl = "http://login.sina.com.cn/sso/login.php";
14 | var ssoLogoutUrl = "http://login.sina.com.cn/sso/logout.php";
15 | var ssoUpdateCookieUrl = "http://login.sina.com.cn/sso/updatetgt.php";
16 | var ssoPreLoginUrl = "http://login.sina.com.cn/sso/prelogin.php";
17 | var pincodeUrl = "http://login.sina.com.cn/cgi/pin.php";
18 | var vfValidUrl = "http://weibo.com/sguide/vdun.php";
19 | var generateVisitorUrl = "http://passport.weibo.com/visitor/visitor";
20 | var crossDomainUrlList = null;
21 | var loginMethod = "";
22 | var ssoServerTimeTimer = null;
23 | var ssoLoginTimer = null;
24 | var loginByConfig = null;
25 | var loginMethodCheck = null;
26 | var https = 1;
27 | var rsa = 2;
28 | var wsse = 4;
29 | var pcid = "";
30 | var tmpData = {};
31 | var preloginTimeStart = 0;
32 | var preloginTime = 0;
33 | var callbackLogoutStatus;
34 | this.https = 1;
35 | this.rsa = 2;
36 | this.wsse = 4;
37 | this.name = "sinaSSOController";
38 | this.loginFormId = "ssoLoginForm";
39 | this.scriptId = "ssoLoginScript";
40 | this.ssoCrossDomainScriptId = "ssoCrossDomainScriptId";
41 | this.loginFrameName = "ssoLoginFrame";
42 | this.appLoginURL = {
43 | "weibo.com": "https://passport.weibo.com/wbsso/login"
44 | };
45 | this.appDomainService = {
46 | "weibo.com": "miniblog"
47 | };
48 | this.loginExtraQuery = {};
49 | this.setDomain = false;
50 | this.feedBackUrl = "";
51 | this.service = "sso";
52 | this.domain = "sina.com.cn";
53 | this.from = "";
54 | this.pageCharset = "GB2312";
55 | this.useTicket = false;
56 | this.isCheckLoginState = false;
57 | this.isUpdateCookieOnLoad = true;
58 | this.useIframe = true;
59 | this.noActiveTime = 7200;
60 | this.autoUpdateCookieTime = 1800;
61 | this.loginType = rsa;
62 | this.timeoutEnable = false;
63 | this.loginTimeout = 5000;
64 | this.crossDomain = true;
65 | this.scriptLoginHttps = false;
66 | this.allowAutoFoundServerTime = false;
67 | this.allowAutoFoundServerTimeError = true;
68 | this.calcServerTimeInterval = 2000;
69 | this.servertime = null;
70 | this.nonce = null;
71 | this.rsaPubkey = null;
72 | this.rsakv = null;
73 | this.loginExtraFlag = {};
74 | this.cdult = false;
75 | this.crossDomainTime = 5;
76 | this.failRedirect = false;
77 | this.isGenerateVisitor = true;
78 | this.generateVisitorProbability = 1;
79 | this.generateVisitorDelay = 6;
80 | this.generateVisitorDomain = ["^.*sina.com.cn$"];
81 | this.getVersion = function() {
82 | return "ssologin.js(v1.4.18) 2014-06-12"
83 | };
84 | this.getEntry = function() {
85 | return me.entry
86 | };
87 | this.getClientType = function() {
88 | return me.getVersion().split(" ")[0]
89 | };
90 | this.init = function() {
91 | if (getType(arguments[0]) === "object") {
92 | return customPrepare(arguments[0])
93 | }
94 | me.setLoginType(me.loginType);
95 | var ssoConfig = window.sinaSSOConfig;
96 | if (typeof ssoConfig != "object") {
97 | ssoConfig = {}
98 | }
99 | var name;
100 | for (name in ssoConfig) {
101 | me[name] = ssoConfig[name]
102 | }
103 | if (!me.entry) {
104 | me.entry = me.service
105 | }
106 | if (me.isUpdateCookieOnLoad) {
107 | setTimeout(me.name + ".updateCookie()", 10000)
108 | }
109 | if (me.isGenerateVisitor) {
110 | if (self === top && Math.random() < me.generateVisitorProbability && location.protocol !== "https:") {
111 | setTimeout(me.name + ".generateVisitor()", me.generateVisitorDelay * 1000)
112 | }
113 | }
114 | if (me.isCheckLoginState) {
115 | addEventListener(window, "load",
116 | function() {
117 | me.checkLoginState()
118 | })
119 | }
120 | if (me.allowAutoFoundServerTime && ssoLoginServerTime) {
121 | me.setServerTime(ssoLoginServerTime)
122 | }
123 | me.customInit()
124 | };
125 | this.getLoginInfo = function() {
126 | var sso_info = getCookie("sso_info");
127 | if (!sso_info) {
128 | return {}
129 | }
130 | try {
131 | return parse_str(sinaSSOEncoder.Cookie.decode(sso_info))
132 | } catch(e) {
133 | return {}
134 | }
135 | };
136 | this.customInit = function() {};
137 | this.customUpdateCookieCallBack = function(result) {};
138 | this.customLoginCallBack = function(loginStatus) {};
139 | this.customLogoutCallBack = function(result) {
140 | me.customLoginCallBack({
141 | result: false
142 | })
143 | };
144 | var customLogin, customPrepare, customLogout; (function() {
145 | var $empty = function() {},
146 | loginParam = {
147 | username: "",
148 | password: "",
149 | savestate: 0,
150 | vsnf: 0,
151 | vsnval: "",
152 | door: "",
153 | setCookie: 1,
154 | ssoSimpleLogin: 0,
155 | onComplete: $empty,
156 | onSuccess: $empty,
157 | onFailure: $empty
158 | },
159 | logoutParam = {
160 | onComplete: $empty,
161 | onSuccess: $empty,
162 | onFailure: $empty
163 | },
164 | hashExtra = {
165 | vsnf: "vsnf",
166 | vsnval: "vsnval",
167 | door: "door",
168 | setCookie: "s",
169 | ssoSimpleLogin: "ssosimplelogin"
170 | },
171 | loginOptions = {},
172 | logoutOptions = {};
173 | var parseParam = function(original, spec) {
174 | var key, param = {};
175 | original = original || {};
176 | spec = spec || {};
177 | objMerge(param, original);
178 | for (key in spec) {
179 | if (original.hasOwnProperty(key)) {
180 | param[key] = spec[key]
181 | }
182 | }
183 | return param
184 | };
185 | var callback = function(options, name, loginStatus) {
186 | if (typeof(options[name]) === "function") {
187 | options[name](loginStatus)
188 | }
189 | };
190 | this.callbackLoginStatus = function(loginStatus) {
191 | me.customLoginCallBack(loginStatus);
192 | callback(loginOptions, "onComplete", loginStatus);
193 | if (loginStatus && loginStatus.result === true) {
194 | callback(loginOptions, "onSuccess", loginStatus)
195 | } else {
196 | callback(loginOptions, "onFailure", loginStatus)
197 | }
198 | };
199 | callbackLogoutStatus = function(logoutStatus) {
200 | me.customLogoutCallBack(logoutStatus);
201 | callback(logoutOptions, "onComplete", logoutStatus);
202 | if (logoutStatus && logoutStatus.result === true) {
203 | callback(logoutOptions, "onSuccess", logoutStatus)
204 | } else {
205 | callback(logoutOptions, "onFailure", logoutStatus)
206 | }
207 | };
208 | customPrepare = function(spec) {
209 | var key;
210 | spec = spec || {};
211 | loginOptions = objMerge({
212 | entry: "sso",
213 | useTicket: false,
214 | service: "sso",
215 | domain: "sina.com.cn",
216 | feedBackUrl: "",
217 | setDomain: false,
218 | crossDomain: true,
219 | name: "sinaSSOController"
220 | },
221 | loginParam);
222 | loginOptions = parseParam(loginOptions, spec);
223 | window[loginOptions.name] = window[loginOptions.name] || me;
224 | for (key in loginOptions) {
225 | if (!loginParam.hasOwnProperty(key)) {
226 | me[key] = loginOptions[key]
227 | }
228 | }
229 | me.loginExtraQuery = {};
230 | objMerge(me.loginExtraQuery, loginOptions.loginExtraQuery);
231 | for (key in hashExtra) {
232 | if (loginOptions.hasOwnProperty(key)) {
233 | me.loginExtraQuery[hashExtra[key]] = loginOptions[key]
234 | }
235 | }
236 | };
237 | customLogin = function(spec) {
238 | spec = spec || {};
239 | customPrepare(spec);
240 | me.login(loginOptions.username, loginOptions.password, loginOptions.savestate)
241 | };
242 | customLogout = function(spec) {
243 | spec = spec || {};
244 | logoutOptions = objMerge({},
245 | logoutParam);
246 | logoutOptions = parseParam(logoutOptions, spec);
247 | me.logout()
248 | }
249 | }).apply(this);
250 | this.login = function(username, password, savestate) {
251 | if (getType(arguments[0]) === "object") {
252 | return customLogin(arguments[0])
253 | }
254 | if (!ssoLoginTimer) {
255 | ssoLoginTimer = new prototypeTimer(me.timeoutEnable)
256 | } else {
257 | ssoLoginTimer.clear()
258 | }
259 | ssoLoginTimer.start(me.loginTimeout,
260 | function() {
261 | ssoLoginTimer.clear();
262 | me.callbackLoginStatus({
263 | result: false,
264 | errno: -1,
265 | reason: unescape("%u767B%u5F55%u8D85%u65F6%uFF0C%u8BF7%u91CD%u8BD5")
266 | })
267 | });
268 | savestate = savestate == undefined ? 0 : savestate;
269 | tmpData.savestate = savestate;
270 | loginByConfig = function() {
271 | if (!me.feedBackUrl && loginByXMLHttpRequest(username, password, savestate)) {
272 | return true
273 | }
274 | if (me.useIframe && (me.setDomain || me.feedBackUrl)) {
275 | if (me.setDomain) {
276 | document.domain = me.domain;
277 | if (!me.feedBackUrl && me.domain != "sina.com.cn") {
278 | me.feedBackUrl = makeURL(me.appLoginURL[me.domain], {
279 | domain: 1
280 | })
281 | }
282 | }
283 | loginMethod = "post";
284 | var result = loginByIframe(username, password, savestate);
285 | if (!result) {
286 | loginMethod = "get";
287 | if (me.scriptLoginHttps) {
288 | me.setLoginType(me.loginType | https)
289 | } else {
290 | me.setLoginType(me.loginType | rsa)
291 | }
292 | loginByScript(username, password, savestate)
293 | }
294 | } else {
295 | loginMethod = "get";
296 | loginByScript(username, password, savestate)
297 | }
298 | me.nonce = null
299 | };
300 | loginMethodCheck = function() {
301 | if ((me.loginType & wsse) || (me.loginType & rsa)) {
302 | if (me.servertime) {
303 | if (!me.nonce) {
304 | me.nonce = makeNonce(6)
305 | }
306 | loginByConfig();
307 | return true
308 | }
309 | me.getServerTime(username, loginByConfig)
310 | } else {
311 | loginByConfig()
312 | }
313 | };
314 | loginMethodCheck();
315 | return true
316 | };
317 | this.prelogin = function(config, callback) {
318 | var url = location.protocol == "https:" ? ssoPreLoginUrl.replace(/^http:/, "https:") : ssoPreLoginUrl;
319 | var username = config.username || "";
320 | username = sinaSSOEncoder.base64.encode(urlencode(username));
321 | delete config.username;
322 | var arrQuery = {
323 | entry: me.entry,
324 | callback: me.name + ".preloginCallBack",
325 | su: username,
326 | rsakt: "mod"
327 | };
328 | url = makeURL(url, objMerge(arrQuery, config));
329 | me.preloginCallBack = function(result) {
330 | if (result && result.retcode == 0) {
331 | me.setServerTime(result.servertime);
332 | me.nonce = result.nonce;
333 | me.rsaPubkey = result.pubkey;
334 | me.rsakv = result.rsakv;
335 | pcid = result.pcid;
336 | preloginTime = (new Date()).getTime() - preloginTimeStart - (parseInt(result.exectime, 10) || 0)
337 | }
338 | if (typeof callback == "function") {
339 | callback(result)
340 | }
341 | };
342 | preloginTimeStart = (new Date()).getTime();
343 | excuteScript(me.scriptId, url)
344 | };
345 | this.getServerTime = function(username, callback) {
346 | if (me.servertime) {
347 | if (typeof callback == "function") {
348 | callback({
349 | retcode: 0,
350 | servertime: me.servertime
351 | })
352 | }
353 | return true
354 | }
355 | me.prelogin({
356 | username: username
357 | },
358 | callback)
359 | };
360 | this.logout = function() {
361 | try {
362 | if (getType(arguments[0]) === "object") {
363 | return customLogout(arguments[0])
364 | }
365 | var request = {
366 | entry: me.getEntry(),
367 | callback: me.name + ".ssoLogoutCallBack"
368 | };
369 | try {
370 | request.sr = window.screen.width + "*" + window.screen.height
371 | } catch(e) {}
372 | var url = location.protocol == "https:" ? ssoLogoutUrl.replace(/^http:/, "https:") : ssoLogoutUrl;
373 | url = makeURL(url, request);
374 | excuteScript(me.scriptId, url)
375 | } catch(e) {}
376 | return true
377 | };
378 | this.ssoLogoutCallBack = function(result) {
379 | if (result.arrURL) {
380 | me.setCrossDomainUrlList(result)
381 | }
382 | me.crossDomainAction("logout",
383 | function() {
384 | callbackLogoutStatus({
385 | result: true
386 | })
387 | })
388 | };
389 | this.updateCookie = function() {
390 | try {
391 | if (me.autoUpdateCookieTime > 5) {
392 | if (updateCookieTimer != null) {
393 | clearTimeout(updateCookieTimer)
394 | }
395 | updateCookieTimer = setTimeout(me.name + ".updateCookie()", me.autoUpdateCookieTime * 1000)
396 | }
397 | var cookieExpireTime = me.getCookieExpireTime();
398 | var now = (new Date()).getTime() / 1000;
399 | var result = {};
400 | if (cookieExpireTime == null) {
401 | result = {
402 | retcode: 6102
403 | }
404 | } else {
405 | if (cookieExpireTime < now) {
406 | result = {
407 | retcode: 6203
408 | }
409 | } else {
410 | if (cookieExpireTime - cookieExpireTimeLength + updateCookieTimeHardLimit > now) {
411 | result = {
412 | retcode: 6110
413 | }
414 | } else {
415 | if (cookieExpireTime - now > me.noActiveTime) {
416 | result = {
417 | retcode: 6111
418 | }
419 | }
420 | }
421 | }
422 | }
423 | if (result.retcode !== undefined) {
424 | me.customUpdateCookieCallBack(result);
425 | return false
426 | }
427 | var url = location.protocol == "https:" ? ssoUpdateCookieUrl.replace(/^http:/, "https:") : ssoUpdateCookieUrl;
428 | url = makeURL(url, {
429 | entry: me.getEntry(),
430 | callback: me.name + ".updateCookieCallBack"
431 | });
432 | excuteScript(me.scriptId, url)
433 | } catch(e) {}
434 | return true
435 | };
436 | this.setCrossDomainUrlList = function(urlList) {
437 | crossDomainUrlList = urlList
438 | };
439 | this.checkAltLoginName = function() {
440 | return true
441 | };
442 | this.callFeedBackUrl = function(loginStatus) {
443 | try {
444 | var request = {
445 | callback: me.name + ".feedBackUrlCallBack"
446 | };
447 | if (loginStatus.ticket) {
448 | request.ticket = loginStatus.ticket
449 | }
450 | if (loginStatus.retcode !== undefined) {
451 | request.retcode = loginStatus.retcode
452 | }
453 | var url = makeURL(me.feedBackUrl, request);
454 | excuteScript(me.scriptId, url)
455 | } catch(e) {}
456 | return true
457 | };
458 | this.loginCallBack = function(result) {
459 | try {
460 | if (me.timeoutEnable && !ssoLoginTimer.isset()) {
461 | return
462 | }
463 | ssoLoginTimer.clear();
464 | me.loginExtraFlag = {};
465 | var loginStatus = {};
466 | var st = result.ticket;
467 | var uid = result.uid;
468 | if (uid) {
469 | loginStatus.result = true;
470 | loginStatus.retcode = 0;
471 | loginStatus.userinfo = {
472 | uniqueid: result.uid
473 | };
474 | if (st) {
475 | loginStatus.ticket = st
476 | }
477 | if (result.cookie) {
478 | loginStatus.cookie = result.cookie
479 | }
480 | if (me.feedBackUrl) {
481 | if (me.crossDomain) {
482 | me.crossDomainAction("login",
483 | function() {
484 | me.callFeedBackUrl(loginStatus)
485 | })
486 | } else {
487 | me.callFeedBackUrl(loginStatus)
488 | }
489 | } else {
490 | if (me.crossDomain) {
491 | if (result.crossDomainUrlList) {
492 | me.setCrossDomainUrlList({
493 | retcode: 0,
494 | arrURL: result.crossDomainUrlList
495 | })
496 | }
497 | me.crossDomainAction("login",
498 | function() {
499 | if (st && me.appLoginURL[me.domain]) {
500 | me.appLogin(st, me.domain, me.name + ".callbackLoginStatus")
501 | } else {
502 | loginStatus.userinfo = objMerge(loginStatus.userinfo, me.getSinaCookie());
503 | me.callbackLoginStatus(loginStatus)
504 | }
505 | })
506 | } else {
507 | me.callbackLoginStatus(loginStatus)
508 | }
509 | }
510 | } else {
511 | if (loginMethodCheck && result.retcode == "2092" && me.allowAutoFoundServerTimeError) {
512 | me.setServerTime(0);
513 | me.loginExtraFlag = objMerge(me.loginExtraFlag, {
514 | wsseretry: "servertime_error"
515 | });
516 | loginMethodCheck();
517 | loginMethodCheck = null;
518 | return false
519 | }
520 | loginStatus.result = false;
521 | loginStatus.errno = result.retcode;
522 | if (loginStatus.errno == "4069") {
523 | var reason = result.reason.split("|");
524 | loginStatus.reason = reason[0];
525 | if (reason.length == 2) {
526 | loginStatus.rurl = reason[1]
527 | }
528 | if (loginStatus.rurl) {
529 | try {
530 | top.location.href = loginStatus.rurl;
531 | return
532 | } catch(e) {}
533 | }
534 | } else {
535 | loginStatus.reason = result.reason
536 | }
537 | me.callbackLoginStatus(loginStatus)
538 | }
539 | } catch(e) {}
540 | return true
541 | };
542 | this.updateCookieCallBack = function(result) {
543 | if (result.retcode == 0) {
544 | me.crossDomainAction("update",
545 | function() {
546 | me.customUpdateCookieCallBack(result)
547 | })
548 | } else {
549 | me.customUpdateCookieCallBack(result)
550 | }
551 | };
552 | this.feedBackUrlCallBack = function(result) {
553 | if (loginMethod == "post" && me.timeoutEnable && !ssoLoginTimer.isset()) {
554 | return
555 | }
556 | if (result.errno == "2092") {
557 | me.setServerTime(0)
558 | }
559 | if (loginMethodCheck && (result.errno == "2092") && me.allowAutoFoundServerTimeError) {
560 | me.loginExtraFlag = objMerge(me.loginExtraFlag, {
561 | wsseretry: "servertime_error"
562 | });
563 | loginMethodCheck();
564 | loginMethodCheck = null;
565 | return false
566 | } else {
567 | ssoLoginTimer && ssoLoginTimer.clear()
568 | }
569 | if (result.errno == "4069") {
570 | var reason = result.reason.split("|");
571 | result.reason = reason[0];
572 | if (reason.length == 2) {
573 | result.rurl = reason[1];
574 | try {
575 | top.location.href = result.rurl;
576 | return
577 | } catch(e) {}
578 | }
579 | }
580 | me.callbackLoginStatus(result);
581 | removeNode(me.loginFrameName)
582 | };
583 | this.doCrossDomainCallBack = function(result) {
584 | me.crossDomainCounter++;
585 | if (result) {
586 | removeNode(result.scriptId)
587 | }
588 | if (me.crossDomainCounter == me.crossDomainCount) {
589 | clearTimeout(crossDomainTimer);
590 | me.crossDomainResult()
591 | }
592 | };
593 | this.crossDomainCallBack = function(result) {
594 | removeNode(me.ssoCrossDomainScriptId);
595 | if (!result || result.retcode != 0) {
596 | return false
597 | }
598 | var arrURL = result.arrURL;
599 | var url, scriptId;
600 | var request = {
601 | callback: me.name + ".doCrossDomainCallBack"
602 | };
603 | me.crossDomainCount = arrURL.length;
604 | me.crossDomainCounter = 0;
605 | if (arrURL.length == 0) {
606 | clearTimeout(crossDomainTimer);
607 | me.crossDomainResult();
608 | return true
609 | }
610 | for (var i = 0; i < arrURL.length; i++) {
611 | url = arrURL[i];
612 | scriptId = "ssoscript" + i;
613 | request.scriptId = scriptId;
614 | url = makeURL(url, request);
615 | if (isSafari()) {
616 | excuteIframe(scriptId, url)
617 | } else {
618 | excuteScript(scriptId, url)
619 | }
620 | }
621 | };
622 | this.crossDomainResult = function() {
623 | crossDomainUrlList = null;
624 | if (typeof crossDomainForward == "function") {
625 | crossDomainForward()
626 | }
627 | };
628 | this.crossDomainAction = function(action, callback) {
629 | crossDomainTimer = setTimeout(me.name + ".crossDomainResult()", crossDomainTime * 1000);
630 | if (typeof callback == "function") {
631 | crossDomainForward = callback
632 | } else {
633 | crossDomainForward = null
634 | }
635 | if (crossDomainUrlList) {
636 | me.crossDomainCallBack(crossDomainUrlList);
637 | return false
638 | }
639 | var domain = me.domain;
640 | if (action == "update") {
641 | action = "login";
642 | domain = "sina.com.cn"
643 | }
644 | var request = {
645 | scriptId: me.ssoCrossDomainScriptId,
646 | callback: me.name + ".crossDomainCallBack",
647 | action: action,
648 | domain: domain,
649 | sr: window.screen.width + "*" + window.screen.height
650 | };
651 | var url = makeURL(ssoCrosssDomainUrl, request);
652 | excuteScript(me.ssoCrossDomainScriptId, url)
653 | };
654 | this.checkLoginState = function(callback) {
655 | if (callback) {
656 | me.autoLogin(callback)
657 | } else {
658 | me.autoLogin(function(cookieinfo) {
659 | var loginStatus = {};
660 | if (cookieinfo !== null) {
661 | var userinfo = {
662 | displayname: cookieinfo.nick,
663 | uniqueid: cookieinfo.uid,
664 | userid: cookieinfo.user
665 | };
666 | loginStatus.result = true;
667 | loginStatus.userinfo = userinfo
668 | } else {
669 | loginStatus.result = false;
670 | loginStatus.reason = ""
671 | }
672 | me.callbackLoginStatus(loginStatus)
673 | })
674 | }
675 | };
676 | this.getCookieExpireTime = function() {
677 | return getCookieExpireTimeByDomain(me.domain)
678 | };
679 | this.getSinaCookie = function(strict) {
680 | var sup = urldecode(getCookie("SUP"));
681 | if (!sup && !urldecode(getCookie("ALF"))) {
682 | return null
683 | }
684 | if (!sup) {
685 | sup = urldecode(getCookie("SUR"))
686 | }
687 | if (!sup) {
688 | return null
689 | }
690 | var arrSup = parse_str(sup);
691 | if (strict && arrSup.et && (arrSup.et * 1000 < (new Date()).getTime())) {
692 | return null
693 | }
694 | return arrSup
695 | };
696 | this.get51UCCookie = function() {
697 | return me.getSinaCookie()
698 | };
699 | this.isPreLoginState = function() {
700 | var subp = getCookie("SUBP");
701 | if (!subp) {
702 | return false
703 | }
704 | var subp_obj = sinaSSOEncoder.getSUBPCookie.decode(subp);
705 | if (subp_obj && subp_obj.status == "40") {
706 | return true
707 | }
708 | return false
709 | };
710 | this.isVisitor = function() {
711 | var subp = getCookie("SUBP");
712 | if (!subp) {
713 | return false
714 | }
715 | var subp_obj = sinaSSOEncoder.getSUBPCookie.decode(subp);
716 | if (subp_obj && subp_obj.status == "20") {
717 | return true
718 | }
719 | return false
720 | };
721 | this.autoLogin = function(callback, strict) {
722 | if (me.domain == "sina.com.cn") {
723 | if (getCookie("SUP") === null && getCookie("ALF") !== null) {
724 | sinaAutoLogin(callback);
725 | return true
726 | }
727 | } else {
728 | if (getCookie("SUP") === null && (strict || getCookie("SSOLoginState") !== null || getCookie("ALF") !== null)) {
729 | sinaAutoLogin(callback);
730 | return true
731 | }
732 | }
733 | callback(me.getSinaCookie());
734 | return true
735 | };
736 | this.autoLoginCallBack2 = function(result) {
737 | try {
738 | autoLoginCallBack2(me.getSinaCookie())
739 | } catch(e) {}
740 | return true
741 | };
742 | this.appLogin = function(ticket, domain, callback) {
743 | var savestate = tmpData.savestate ? parseInt((new Date()).getTime() / 1000 + tmpData.savestate * 86400) : 0;
744 | var alf = getCookie("ALF") ? getCookie("ALF") : 0;
745 | var request = {
746 | callback: callback,
747 | ticket: ticket,
748 | ssosavestate: savestate || alf
749 | };
750 | var appLoginURL = me.appLoginURL[domain];
751 | var url = makeURL(appLoginURL, request);
752 | excuteScript(me.scriptId, url, "gb2312");
753 | return true
754 | };
755 | this.autoLoginCallBack3 = function(result) {
756 | if (result.retcode != 0) {
757 | me.autoLoginCallBack2(result);
758 | return false
759 | }
760 | var domain = me.domain == "sina.com.cn" ? "weibo.com": me.domain;
761 | me.appLogin(result.ticket, domain, me.name + ".autoLoginCallBack2");
762 | return true
763 | };
764 | this.setLoginType = function(loginType) {
765 | var https = location.protocol == "https:" ? me.https: 0;
766 | if (https) {
767 | me.crossDomain = false
768 | }
769 | me.loginType = loginType | https;
770 | return true
771 | };
772 | this.setServerTime = function(servertime) {
773 | if (!ssoServerTimeTimer) {
774 | ssoServerTimeTimer = new prototypeTimer(true)
775 | }
776 | if (servertime == 0) {
777 | ssoServerTimeTimer.clear();
778 | me.servertime = servertime;
779 | return true
780 | }
781 | if (servertime < 1294935546) {
782 | return false
783 | }
784 | var calcServerTime = function() {
785 | if (me.servertime) {
786 | me.servertime += me.calcServerTimeInterval / 1000;
787 | ssoServerTimeTimer.start(me.calcServerTimeInterval, calcServerTime)
788 | }
789 | };
790 | me.servertime = servertime;
791 | ssoServerTimeTimer.start(me.calcServerTimeInterval, calcServerTime)
792 | };
793 | this.getPinCodeUrl = function(size) {
794 | if (size == undefined) {
795 | size = 0
796 | }
797 | if (pcid) {
798 | me.loginExtraQuery.pcid = pcid
799 | }
800 | var url = location.protocol == "https:" ? pincodeUrl.replace(/^http:/, "https:") : pincodeUrl;
801 | return url + "?r=" + Math.floor(Math.random() * 100000000) + "&s=" + size + (pcid.length > 0 ? "&p=" + pcid: "")
802 | };
803 | this.showPinCode = function(id) {
804 | me.$(id).src = me.getPinCodeUrl()
805 | };
806 | this.isVfValid = function() {
807 | return me.getSinaCookie(true)["vf"] != 1
808 | };
809 | this.getVfValidUrl = function() {
810 | return vfValidUrl
811 | };
812 | this.enableFailRedirect = function() {
813 | me.failRedirect = true
814 | };
815 | var makeNonce = function(len) {
816 | var x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
817 | var str = "";
818 | for (var i = 0; i < len; i++) {
819 | str += x.charAt(Math.ceil(Math.random() * 1000000) % x.length)
820 | }
821 | return str
822 | };
823 | var sinaAutoLogin = function(callback) {
824 | autoLoginCallBack2 = callback;
825 | var request = {
826 | entry: me.getEntry(),
827 | service: me.service,
828 | encoding: "UTF-8",
829 | gateway: 1,
830 | returntype: "TEXT",
831 | from: me.from
832 | };
833 | if (me.domain == "sina.com.cn") {
834 | request.callback = me.name + ".autoLoginCallBack3";
835 | request.service = "miniblog";
836 | request.useticket = 1
837 | } else {
838 | request.callback = me.name + ".autoLoginCallBack3";
839 | request.useticket = 1
840 | }
841 | var url = location.protocol == "https:" ? ssoLoginUrl.replace(/^http:/, "https:") : ssoLoginUrl;
842 | url = makeURL(url, request);
843 | excuteScript(me.scriptId, url, "gb2312");
844 | return true
845 | };
846 | var getCookieExpireTimeByDomain = function(domain) {
847 | var expireTime = null;
848 | var cookie = null;
849 | cookie = me.getSinaCookie();
850 | if (cookie) {
851 | expireTime = cookie.et
852 | }
853 | return expireTime
854 | };
855 | var addEventListener = function(dom, eventName, fn) {
856 | if (dom.addEventListener) {
857 | dom.addEventListener(eventName, fn, false)
858 | } else {
859 | if (dom.attachEvent) {
860 | dom.attachEvent("on" + eventName, fn)
861 | } else {
862 | dom["on" + eventName] = fn
863 | }
864 | }
865 | };
866 | var prototypeTimer = function(enable) {
867 | var mytimer = false;
868 | this.start = function(timeout, callback) {
869 | if (enable) {
870 | mytimer = setTimeout(callback, timeout)
871 | }
872 | };
873 | this.clear = function(name) {
874 | if (enable) {
875 | clearTimeout(mytimer);
876 | mytimer = false
877 | }
878 | };
879 | this.isset = function() {
880 | return mytimer !== false
881 | }
882 | };
883 | var excuteScript = function(id, scriptSource, charset) {
884 | removeNode(id);
885 | var head = document.getElementsByTagName("head")[0];
886 | var newScript = document.createElement("script");
887 | newScript.charset = charset || "gb2312";
888 | newScript.id = id;
889 | newScript.type = "text/javascript";
890 | newScript.src = makeURL(scriptSource, {
891 | client: me.getClientType(),
892 | _: (new Date()).getTime()
893 | });
894 | head.appendChild(newScript)
895 | };
896 | var excuteIframe = function(id, url) {
897 | removeNode(id);
898 | var bodyel = document.getElementsByTagName("body")[0];
899 | var new_iframe = document.createElement("iframe");
900 | new_iframe.style.display = "none";
901 | new_iframe.src = makeURL(url, {
902 | client: me.getClientType(),
903 | _: (new Date()).getTime()
904 | });
905 | new_iframe.isReady = false;
906 | addEventListener(new_iframe, "load",
907 | function() {
908 | if (new_iframe.isReady) {
909 | return
910 | }
911 | new_iframe.isReady = true;
912 | me.doCrossDomainCallBack({
913 | scriptId: id
914 | })
915 | });
916 | bodyel.appendChild(new_iframe)
917 | };
918 | var makeRequest = function(username, password, savestate) {
919 | var request = {
920 | entry: me.getEntry(),
921 | gateway: 1,
922 | from: me.from,
923 | savestate: savestate,
924 | useticket: me.useTicket ? 1 : 0
925 | };
926 | if (me.failRedirect) {
927 | me.loginExtraQuery.frd = 1
928 | }
929 | request = objMerge(request, {
930 | pagerefer: document.referrer || ""
931 | });
932 | request = objMerge(request, me.loginExtraFlag);
933 | request = objMerge(request, me.loginExtraQuery);
934 | request.su = sinaSSOEncoder.base64.encode(urlencode(username));
935 | if (me.service) {
936 | request.service = me.service
937 | }
938 | if ((me.loginType & rsa) && me.servertime && sinaSSOEncoder && sinaSSOEncoder.RSAKey) {
939 | request.servertime = me.servertime;
940 | request.nonce = me.nonce;
941 | request.pwencode = "rsa2";
942 | request.rsakv = me.rsakv;
943 | var RSAKey = new sinaSSOEncoder.RSAKey();
944 | RSAKey.setPublic(me.rsaPubkey, "10001");
945 | password = RSAKey.encrypt([me.servertime, me.nonce].join("\t") + "\n" + password)
946 | } else {
947 | if ((me.loginType & wsse) && me.servertime && sinaSSOEncoder && sinaSSOEncoder.hex_sha1) {
948 | request.servertime = me.servertime;
949 | request.nonce = me.nonce;
950 | request.pwencode = "wsse";
951 | password = sinaSSOEncoder.hex_sha1("" + sinaSSOEncoder.hex_sha1(sinaSSOEncoder.hex_sha1(password)) + me.servertime + me.nonce)
952 | }
953 | }
954 | request.sp = password;
955 | try {
956 | request.sr = window.screen.width + "*" + window.screen.height
957 | } catch(e) {}
958 | return request
959 | };
960 | var loginByXMLHttpRequest = function(username, password, savestate) {
961 | if (typeof XMLHttpRequest == "undefined") {
962 | return false
963 | }
964 | var xhr = new XMLHttpRequest();
965 | if (!"withCredentials" in xhr) {
966 | return false
967 | }
968 | var request = makeXMLRequestQuery(username, password, savestate);
969 | var url = (me.loginType & https) ? ssoLoginUrl.replace(/^http:/, "https:") : ssoLoginUrl;
970 | url = makeURL(url, {
971 | client: me.getClientType(),
972 | _: (new Date()).getTime()
973 | });
974 | try {
975 | xhr.open("POST", url, true);
976 | xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
977 | xhr.withCredentials = true;
978 | xhr.onreadystatechange = function() {
979 | if (xhr.readyState == 4 && xhr.status == 200) {
980 | me.loginCallBack(parseJSON(xhr.responseText))
981 | }
982 | };
983 | xhr.send(httpBuildQuery(request))
984 | } catch(e) {
985 | return false
986 | }
987 | return true
988 | };
989 | var makeXMLRequestQuery = function(username, password, savestate) {
990 | if (me.appLoginURL[me.domain]) {
991 | me.useTicket = 1;
992 | me.service = me.appDomainService[me.domain] || me.service
993 | }
994 | var cdult = 0;
995 | if (me.domain) {
996 | cdult = 2
997 | }
998 | if (!me.appLoginURL[me.domain]) {
999 | cdult = 3
1000 | }
1001 | if (me.cdult !== false) {
1002 | cdult = me.cdult
1003 | }
1004 | if (cdult == 3) {
1005 | crossDomainTime = me.crossDomainTime;
1006 | delete me.appLoginURL[me.domain]
1007 | }
1008 | var request = makeRequest(username, password, savestate);
1009 | return objMerge(request, {
1010 | encoding: "UTF-8",
1011 | cdult: cdult,
1012 | domain: me.domain,
1013 | useticket: me.appLoginURL[me.domain] ? 1 : 0,
1014 | prelt: preloginTime,
1015 | returntype: "TEXT"
1016 | })
1017 | };
1018 | var loginByScript = function(username, password, savestate) {
1019 | var request = makeXMLRequestQuery(username, password, savestate);
1020 | request = objMerge(request, {
1021 | callback: me.name + ".loginCallBack"
1022 | });
1023 | var url = (me.loginType & https) ? ssoLoginUrl.replace(/^http:/, "https:") : ssoLoginUrl;
1024 | url = makeURL(url, request);
1025 | excuteScript(me.scriptId, url, "gb2312")
1026 | };
1027 | var loginByIframe = function(username, password, savestate) {
1028 | createIFrame(me.loginFrameName);
1029 | var loginForm = createForm(me.loginFormId);
1030 | var request = makeRequest(username, password, savestate);
1031 | request.encoding = "UTF-8";
1032 | if (me.crossDomain == false) {
1033 | request.crossdomain = 0
1034 | }
1035 | request.prelt = preloginTime;
1036 | if (me.feedBackUrl) {
1037 | request.url = makeURL(me.feedBackUrl, {
1038 | framelogin: 1,
1039 | callback: "parent." + me.name + ".feedBackUrlCallBack"
1040 | });
1041 | request.returntype = "META"
1042 | } else {
1043 | request.callback = "parent." + me.name + ".loginCallBack";
1044 | request.returntype = "IFRAME";
1045 | request.setdomain = me.setDomain ? 1 : 0
1046 | }
1047 | for (var key in me.loginExtraQuery) {
1048 | if (typeof me.loginExtraQuery[key] == "function") {
1049 | continue
1050 | }
1051 | request[key] = me.loginExtraQuery[key]
1052 | }
1053 | for (var name in request) {
1054 | loginForm.addInput(name, request[name])
1055 | }
1056 | var action = (me.loginType & https) ? ssoLoginUrl.replace(/^http:/, "https:") : ssoLoginUrl;
1057 | action = makeURL(action, objMerge({
1058 | client: me.getClientType()
1059 | },
1060 | me.loginExtraFlag));
1061 | loginForm.method = "post";
1062 | loginForm.action = action;
1063 | loginForm.target = me.loginFrameName;
1064 | var result = true;
1065 | try {
1066 | loginForm.submit()
1067 | } catch(e) {
1068 | removeNode(me.loginFrameName);
1069 | result = false
1070 | }
1071 | setTimeout(function() {
1072 | removeNode(loginForm)
1073 | },
1074 | 10);
1075 | return result
1076 | };
1077 | var createIFrame = function(frameName, src) {
1078 | if (src == null) {
1079 | src = "javascript:false;"
1080 | }
1081 | removeNode(frameName);
1082 | var frame = document.createElement("iframe");
1083 | frame.height = 0;
1084 | frame.width = 0;
1085 | frame.style.display = "none";
1086 | frame.name = frameName;
1087 | frame.id = frameName;
1088 | frame.src = src;
1089 | appendChild(document.body, frame);
1090 | window.frames[frameName].name = frameName;
1091 | return frame
1092 | };
1093 | var createForm = function(formName, display) {
1094 | if (display == null) {
1095 | display = "none"
1096 | }
1097 | removeNode(formName);
1098 | var form = document.createElement("form");
1099 | form.height = 0;
1100 | form.width = 0;
1101 | form.style.display = display;
1102 | form.name = formName;
1103 | form.id = formName;
1104 | appendChild(document.body, form);
1105 | document.forms[formName].name = formName;
1106 | form.addInput = function(name, value, type) {
1107 | if (type == null) {
1108 | type = "text"
1109 | }
1110 | var _name = this.getElementsByTagName("input")[name];
1111 | if (_name) {
1112 | this.removeChild(_name)
1113 | }
1114 | _name = document.createElement("input");
1115 | this.appendChild(_name);
1116 | _name.id = name;
1117 | _name.name = name;
1118 | _name.type = type;
1119 | _name.value = value
1120 | };
1121 | return form
1122 | };
1123 | var removeNode = function(el) {
1124 | try {
1125 | if (typeof(el) === "string") {
1126 | el = me.$(el)
1127 | }
1128 | el.parentNode.removeChild(el)
1129 | } catch(e) {}
1130 | };
1131 | var getType = function(item) {
1132 | if (typeof(item) === "undefined") {
1133 | return "undefined"
1134 | }
1135 | if (item === null) {
1136 | return "null"
1137 | }
1138 | return Object.prototype.toString.call(item).replace(/^\[object\s|\]$/gi, "").toLowerCase()
1139 | };
1140 | var isSafari = function() {
1141 | var browserName = navigator.userAgent.toLowerCase();
1142 | return ((/webkit/i).test(browserName) && !(/chrome/i).test(browserName))
1143 | };
1144 | var appendChild = function(parentObj, element) {
1145 | parentObj.appendChild(element)
1146 | };
1147 | var getCookie = function(name) {
1148 | var Res = (new RegExp(name + "=([^;]+)")).exec(document.cookie);
1149 | return Res == null ? null: Res[1]
1150 | };
1151 | var makeURL = function(url, request) {
1152 | return url + urlAndChar(url) + httpBuildQuery(request)
1153 | };
1154 | var urlAndChar = function(url) {
1155 | return (/\?/.test(url) ? "&": "?")
1156 | };
1157 | var urlencode = function(str) {
1158 | return encodeURIComponent(str)
1159 | };
1160 | var urldecode = function(str) {
1161 | if (str == null) {
1162 | return ""
1163 | } else {
1164 | try {
1165 | return decodeURIComponent(str)
1166 | } catch(e) {
1167 | return ""
1168 | }
1169 | }
1170 | };
1171 | var httpBuildQuery = function(obj) {
1172 | if (typeof obj != "object") {
1173 | return ""
1174 | }
1175 | var arr = new Array();
1176 | for (var key in obj) {
1177 | if (typeof obj[key] == "function") {
1178 | continue
1179 | }
1180 | arr.push(key + "=" + urlencode(obj[key]))
1181 | }
1182 | return arr.join("&")
1183 | };
1184 | var parse_str = function(str) {
1185 | var arr = str.split("&");
1186 | var arrtmp;
1187 | var arrResult = {};
1188 | for (var i = 0; i < arr.length; i++) {
1189 | arrtmp = arr[i].split("=");
1190 | arrResult[arrtmp[0]] = urldecode(arrtmp[1])
1191 | }
1192 | return arrResult
1193 | };
1194 | var parseJSON = function(str) {
1195 | if (typeof(str) === "object") {
1196 | return str
1197 | } else {
1198 | if (window.JSON) {
1199 | return JSON.parse(str)
1200 | } else {
1201 | return eval("(" + str + ")")
1202 | }
1203 | }
1204 | };
1205 | var objMerge = function(obj1, obj2) {
1206 | for (var item in obj2) {
1207 | obj1[item] = obj2[item]
1208 | }
1209 | return obj1
1210 | };
1211 | this.$ = function(id) {
1212 | return document.getElementById(id)
1213 | };
1214 | this.generateVisitor = function() {
1215 | var reg, domainValid = false;
1216 | for (var i = 0; i < this.generateVisitorDomain.length; i++) {
1217 | reg = new RegExp(this.generateVisitorDomain[i]);
1218 | if (reg.test(document.domain)) {
1219 | domainValid = true;
1220 | break
1221 | }
1222 | }
1223 | if (!domainValid) {
1224 | return false
1225 | }
1226 | try {
1227 | if (me.shouldGenerateVisitor() && !me.$("visitorfrm84747h4784")) {
1228 | document.body.insertAdjacentHTML("beforeEnd", "");
1229 | setTimeout(function() {
1230 | try {
1231 | var ifr = me.$("visitorfrm84747h4784");
1232 | if (ifr) {
1233 | ifr.parentNode.removeChild(ifr)
1234 | }
1235 | } catch(e) {}
1236 | },
1237 | 1000 * 30)
1238 | }
1239 | } catch(e) {
1240 | return false
1241 | }
1242 | return true
1243 | };
1244 | this.shouldGenerateVisitor = function() {
1245 | var is_subp_exists = false;
1246 | var is_sup_exists = false;
1247 | var subp = getCookie("SUBP");
1248 | if (subp) {
1249 | is_subp_exists = true
1250 | }
1251 | var sup = getCookie("SUP");
1252 | if (sup) {
1253 | is_sup_exists = true
1254 | }
1255 | if (!is_subp_exists && !is_sup_exists) {
1256 | return true
1257 | }
1258 | return false
1259 | }
1260 | }
1261 | var sinaSSOEncoder = sinaSSOEncoder || {}; (function() {
1262 | var k = 0;
1263 | var h = 8;
1264 | this.hex_sha1 = function(l) {
1265 | return i(c(g(l), l.length * h))
1266 | };
1267 | var c = function(B, s) {
1268 | B[s >> 5] |= 128 << (24 - s % 32);
1269 | B[((s + 64 >> 9) << 4) + 15] = s;
1270 | var C = Array(80);
1271 | var A = 1732584193;
1272 | var z = -271733879;
1273 | var y = -1732584194;
1274 | var v = 271733878;
1275 | var u = -1009589776;
1276 | for (var p = 0; p < B.length; p += 16) {
1277 | var r = A;
1278 | var q = z;
1279 | var o = y;
1280 | var n = v;
1281 | var l = u;
1282 | for (var m = 0; m < 80; m++) {
1283 | if (m < 16) {
1284 | C[m] = B[p + m]
1285 | } else {
1286 | C[m] = e(C[m - 3] ^ C[m - 8] ^ C[m - 14] ^ C[m - 16], 1)
1287 | }
1288 | var D = f(f(e(A, 5), a(m, z, y, v)), f(f(u, C[m]), d(m)));
1289 | u = v;
1290 | v = y;
1291 | y = e(z, 30);
1292 | z = A;
1293 | A = D
1294 | }
1295 | A = f(A, r);
1296 | z = f(z, q);
1297 | y = f(y, o);
1298 | v = f(v, n);
1299 | u = f(u, l)
1300 | }
1301 | return Array(A, z, y, v, u)
1302 | };
1303 | var a = function(m, l, o, n) {
1304 | if (m < 20) {
1305 | return (l & o) | ((~l) & n)
1306 | }
1307 | if (m < 40) {
1308 | return l ^ o ^ n
1309 | }
1310 | if (m < 60) {
1311 | return (l & o) | (l & n) | (o & n)
1312 | }
1313 | return l ^ o ^ n
1314 | };
1315 | var d = function(l) {
1316 | return (l < 20) ? 1518500249 : (l < 40) ? 1859775393 : (l < 60) ? -1894007588 : -899497514
1317 | };
1318 | var f = function(l, o) {
1319 | var n = (l & 65535) + (o & 65535);
1320 | var m = (l >> 16) + (o >> 16) + (n >> 16);
1321 | return (m << 16) | (n & 65535)
1322 | };
1323 | var e = function(l, m) {
1324 | return (l << m) | (l >>> (32 - m))
1325 | };
1326 | var g = function(o) {
1327 | var n = Array();
1328 | var l = (1 << h) - 1;
1329 | for (var m = 0; m < o.length * h; m += h) {
1330 | n[m >> 5] |= (o.charCodeAt(m / h) & l) << (24 - m % 32)
1331 | }
1332 | return n
1333 | };
1334 | var i = function(n) {
1335 | var m = k ? "0123456789ABCDEF": "0123456789abcdef";
1336 | var o = "";
1337 | for (var l = 0; l < n.length * 4; l++) {
1338 | o += m.charAt((n[l >> 2] >> ((3 - l % 4) * 8 + 4)) & 15) + m.charAt((n[l >> 2] >> ((3 - l % 4) * 8)) & 15)
1339 | }
1340 | return o
1341 | };
1342 | var j = function(l) {
1343 | var m = "",
1344 | n = 0;
1345 | for (; n < l.length; n++) {
1346 | m += "%" + b(l[n])
1347 | }
1348 | return decodeURIComponent(m)
1349 | };
1350 | var b = function(l) {
1351 | var m = "0" + l.toString(16);
1352 | return m.length <= 2 ? m: m.substr(1)
1353 | };
1354 | this.base64 = {
1355 | encode: function(n) {
1356 | n = "" + n;
1357 | if (n == "") {
1358 | return ""
1359 | }
1360 | var l = "";
1361 | var u, s, q = "";
1362 | var t, r, p, o = "";
1363 | var m = 0;
1364 | do {
1365 | u = n.charCodeAt(m++);
1366 | s = n.charCodeAt(m++);
1367 | q = n.charCodeAt(m++);
1368 | t = u >> 2;
1369 | r = ((u & 3) << 4) | (s >> 4);
1370 | p = ((s & 15) << 2) | (q >> 6);
1371 | o = q & 63;
1372 | if (isNaN(s)) {
1373 | p = o = 64
1374 | } else {
1375 | if (isNaN(q)) {
1376 | o = 64
1377 | }
1378 | }
1379 | l = l + this._keys.charAt(t) + this._keys.charAt(r) + this._keys.charAt(p) + this._keys.charAt(o);
1380 | u = s = q = "";
1381 | t = r = p = o = ""
1382 | } while ( m < n . length );
1383 | return l
1384 | },
1385 | decode: function(t, q, m) {
1386 | var s = function(C, E) {
1387 | for (var D = 0; D < C.length; D++) {
1388 | if (C[D] === E) {
1389 | return D
1390 | }
1391 | }
1392 | return - 1
1393 | };
1394 | if (typeof(t) == "string") {
1395 | t = t.split("")
1396 | }
1397 | var n = [];
1398 | var B, z, w = "";
1399 | var A, y, v, u = "";
1400 | if (t.length % 4 != 0) {}
1401 | var l = /[^A-Za-z0-9+\/=]/;
1402 | var x = this._keys.split("");
1403 | if (q == "urlsafe") {
1404 | l = /[^A-Za-z0-9-_=]/;
1405 | x = this._keys_urlsafe.split("")
1406 | }
1407 | if (q == "subp_v2") {
1408 | l = /[^A-Za-z0-9_=-]/;
1409 | x = this._subp_v2_keys.split("")
1410 | }
1411 | if (q == "subp_v3_3") {
1412 | l = /[^A-Za-z0-9-_.-]/;
1413 | x = this._subp_v3_keys_3.split("")
1414 | }
1415 | var p = 0;
1416 | if (q == "binnary") {
1417 | x = [];
1418 | for (p = 0; p <= 64; p++) {
1419 | x[p] = p + 128
1420 | }
1421 | }
1422 | if (q != "binnary" && l.test(t.join(""))) {
1423 | return m == "array" ? [] : ""
1424 | }
1425 | p = 0;
1426 | do {
1427 | A = s(x, t[p++]);
1428 | y = s(x, t[p++]);
1429 | v = s(x, t[p++]);
1430 | u = s(x, t[p++]);
1431 | B = (A << 2) | (y >> 4);
1432 | z = ((y & 15) << 4) | (v >> 2);
1433 | w = ((v & 3) << 6) | u;
1434 | n.push(B);
1435 | if (v != 64 && v != -1) {
1436 | n.push(z)
1437 | }
1438 | if (u != 64 && u != -1) {
1439 | n.push(w)
1440 | }
1441 | B = z = w = "";
1442 | A = y = v = u = ""
1443 | } while ( p < t . length );
1444 | if (m == "array") {
1445 | return n
1446 | }
1447 | var r = "",
1448 | o = 0;
1449 | for (; o < n.lenth; o++) {
1450 | r += String.fromCharCode(n[o])
1451 | }
1452 | return r
1453 | },
1454 | _keys: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
1455 | _keys_urlsafe: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=",
1456 | _subp_v2_keys: "uAL715W8e3jJCcNU0lT_FSXVgxpbEDdQ4vKaIOH2GBPtfzqsmYZo-wRM9i6hynrk=",
1457 | _subp_v3_keys_3: "5WFh28sGziZTeS1lBxCK-HgPq9IdMUwknybo.LJrQD3uj_Va7pE0XfcNR4AOYvm6t"
1458 | };
1459 | this.Cookie = {
1460 | decode: function(o) {
1461 | var n = [];
1462 | var m = o.substr(0, 3);
1463 | var l = o.substr(3);
1464 | switch (m) {
1465 | case "v01":
1466 | for (var p = 0; p < l.length; p += 2) {
1467 | n.push(parseInt(l.substr(p, 2), 16))
1468 | }
1469 | return decodeURIComponent(j(sinaSSOEncoder.base64.decode(n, "binnary", "array")));
1470 | break;
1471 | case "v02":
1472 | l = l.replace(/\./g, "=");
1473 | n = sinaSSOEncoder.base64.decode(l, "urlsafe", "array");
1474 | return j(sinaSSOEncoder.base64.decode(n, "binnary", "array"));
1475 | default:
1476 | return decodeURIComponent(o)
1477 | }
1478 | }
1479 | };
1480 | this.getSUBPCookie = {
1481 | __parse: function(o) {
1482 | var y, m, p, n, x, r = 0,
1483 | q, t = {},
1484 | l = "",
1485 | u = "";
1486 | if (!o) {
1487 | return t
1488 | }
1489 | do {
1490 | m = o[r];
1491 | y = ++r;
1492 | for (q = r; q < m + y; q++, r++) {
1493 | l += String.fromCharCode(o[q])
1494 | }
1495 | n = o[r];
1496 | y = ++r;
1497 | if (l == "status" || l == "flag") {
1498 | for (q = r; q < n + y; q++, r++) {
1499 | u += o[q]
1500 | }
1501 | } else {
1502 | u = o.slice(q, n + y);
1503 | try {
1504 | u = j(u)
1505 | } catch(w) {
1506 | u = ""
1507 | }
1508 | r += n
1509 | }
1510 | t[l] = u;
1511 | l = "";
1512 | u = ""
1513 | } while ( r < o . length );
1514 | return t
1515 | },
1516 | decode: function(o) {
1517 | var n = [],
1518 | p,
1519 | m = o.substr(0, 3),
1520 | l = decodeURIComponent(o.substr(3));
1521 | switch (m) {
1522 | case "002":
1523 | n = sinaSSOEncoder.base64.decode(l, "subp_v2", "array");
1524 | return sinaSSOEncoder.getSUBPCookie.__parse(n);
1525 | case "003":
1526 | p = l.substr(0, 1);
1527 | l = l.substr(1);
1528 | n = sinaSSOEncoder.base64.decode(l, "subp_v3_" + p, "array");
1529 | return sinaSSOEncoder.getSUBPCookie.__parse(n);
1530 | default:
1531 | return decodeURIComponent(o)
1532 | }
1533 | }
1534 | }
1535 | }).call(sinaSSOEncoder); (function() {
1536 | var av;
1537 | var ah = 244837814094590;
1538 | var Y = ((ah & 16777215) == 15715070);
1539 |
1540 | function aq(z, t, az) {
1541 | if (z != null) {
1542 | if ("number" == typeof z) {
1543 | this.fromNumber(z, t, az)
1544 | } else {
1545 | if (t == null && "string" != typeof z) {
1546 | this.fromString(z, 256)
1547 | } else {
1548 | this.fromString(z, t)
1549 | }
1550 | }
1551 | }
1552 | }
1553 |
1554 | function h() {
1555 | return new aq(null)
1556 | }
1557 |
1558 | function b(aB, t, z, aA, aD, aC) {
1559 | while (--aC >= 0) {
1560 | var az = t * this[aB++] + z[aA] + aD;
1561 | aD = Math.floor(az / 67108864);
1562 | z[aA++] = az & 67108863
1563 | }
1564 | return aD
1565 | }
1566 |
1567 | function ax(aB, aG, aH, aA, aE, t) {
1568 | var aD = aG & 32767,
1569 | aF = aG >> 15;
1570 | while (--t >= 0) {
1571 | var az = this[aB] & 32767;
1572 | var aC = this[aB++] >> 15;
1573 | var z = aF * az + aC * aD;
1574 | az = aD * az + ((z & 32767) << 15) + aH[aA] + (aE & 1073741823);
1575 | aE = (az >>> 30) + (z >>> 15) + aF * aC + (aE >>> 30);
1576 | aH[aA++] = az & 1073741823
1577 | }
1578 | return aE
1579 | }
1580 |
1581 | function aw(aB, aG, aH, aA, aE, t) {
1582 | var aD = aG & 16383,
1583 | aF = aG >> 14;
1584 | while (--t >= 0) {
1585 | var az = this[aB] & 16383;
1586 | var aC = this[aB++] >> 14;
1587 | var z = aF * az + aC * aD;
1588 | az = aD * az + ((z & 16383) << 14) + aH[aA] + aE;
1589 | aE = (az >> 28) + (z >> 14) + aF * aC;
1590 | aH[aA++] = az & 268435455
1591 | }
1592 | return aE
1593 | }
1594 |
1595 | if (Y && (navigator.appName == "Microsoft Internet Explorer")) {
1596 | aq.prototype.am = ax;
1597 | av = 30
1598 | } else {
1599 | if (Y && (navigator.appName != "Netscape")) {
1600 | aq.prototype.am = b;
1601 | av = 26
1602 | } else {
1603 | aq.prototype.am = aw;
1604 | av = 28
1605 | }
1606 | }
1607 | aq.prototype.DB = av;
1608 | aq.prototype.DM = ((1 << av) - 1);
1609 | aq.prototype.DV = (1 << av);
1610 | var Z = 52;
1611 | aq.prototype.FV = Math.pow(2, Z);
1612 | aq.prototype.F1 = Z - av;
1613 | aq.prototype.F2 = 2 * av - Z;
1614 | var ad = "0123456789abcdefghijklmnopqrstuvwxyz";
1615 | var af = new Array();
1616 | var ao, v;
1617 | ao = "0".charCodeAt(0);
1618 | for (v = 0; v <= 9; ++v) {
1619 | af[ao++] = v
1620 | }
1621 | ao = "a".charCodeAt(0);
1622 | for (v = 10; v < 36; ++v) {
1623 | af[ao++] = v
1624 | }
1625 | ao = "A".charCodeAt(0);
1626 | for (v = 10; v < 36; ++v) {
1627 | af[ao++] = v
1628 | }
1629 | function ay(t) {
1630 | return ad.charAt(t)
1631 | }
1632 |
1633 | function A(z, t) {
1634 | var az = af[z.charCodeAt(t)];
1635 | return (az == null) ? -1 : az
1636 | }
1637 |
1638 | function X(z) {
1639 | for (var t = this.t - 1; t >= 0; --t) {
1640 | z[t] = this[t]
1641 | }
1642 | z.t = this.t;
1643 | z.s = this.s
1644 | }
1645 |
1646 | function n(t) {
1647 | this.t = 1;
1648 | this.s = (t < 0) ? -1 : 0;
1649 | if (t > 0) {
1650 | this[0] = t
1651 | } else {
1652 | if (t < -1) {
1653 | this[0] = t + DV
1654 | } else {
1655 | this.t = 0
1656 | }
1657 | }
1658 | }
1659 |
1660 | function c(t) {
1661 | var z = h();
1662 | z.fromInt(t);
1663 | return z
1664 | }
1665 |
1666 | function w(aD, z) {
1667 | var aA;
1668 | if (z == 16) {
1669 | aA = 4
1670 | } else {
1671 | if (z == 8) {
1672 | aA = 3
1673 | } else {
1674 | if (z == 256) {
1675 | aA = 8
1676 | } else {
1677 | if (z == 2) {
1678 | aA = 1
1679 | } else {
1680 | if (z == 32) {
1681 | aA = 5
1682 | } else {
1683 | if (z == 4) {
1684 | aA = 2
1685 | } else {
1686 | this.fromRadix(aD, z);
1687 | return
1688 | }
1689 | }
1690 | }
1691 | }
1692 | }
1693 | }
1694 | this.t = 0;
1695 | this.s = 0;
1696 | var aC = aD.length,
1697 | az = false,
1698 | aB = 0;
1699 | while (--aC >= 0) {
1700 | var t = (aA == 8) ? aD[aC] & 255 : A(aD, aC);
1701 | if (t < 0) {
1702 | if (aD.charAt(aC) == "-") {
1703 | az = true
1704 | }
1705 | continue
1706 | }
1707 | az = false;
1708 | if (aB == 0) {
1709 | this[this.t++] = t
1710 | } else {
1711 | if (aB + aA > this.DB) {
1712 | this[this.t - 1] |= (t & ((1 << (this.DB - aB)) - 1)) << aB;
1713 | this[this.t++] = (t >> (this.DB - aB))
1714 | } else {
1715 | this[this.t - 1] |= t << aB
1716 | }
1717 | }
1718 | aB += aA;
1719 | if (aB >= this.DB) {
1720 | aB -= this.DB
1721 | }
1722 | }
1723 | if (aA == 8 && (aD[0] & 128) != 0) {
1724 | this.s = -1;
1725 | if (aB > 0) {
1726 | this[this.t - 1] |= ((1 << (this.DB - aB)) - 1) << aB
1727 | }
1728 | }
1729 | this.clamp();
1730 | if (az) {
1731 | aq.ZERO.subTo(this, this)
1732 | }
1733 | }
1734 |
1735 | function O() {
1736 | var t = this.s & this.DM;
1737 | while (this.t > 0 && this[this.t - 1] == t) {--this.t
1738 | }
1739 | }
1740 |
1741 | function q(z) {
1742 | if (this.s < 0) {
1743 | return "-" + this.negate().toString(z)
1744 | }
1745 | var az;
1746 | if (z == 16) {
1747 | az = 4
1748 | } else {
1749 | if (z == 8) {
1750 | az = 3
1751 | } else {
1752 | if (z == 2) {
1753 | az = 1
1754 | } else {
1755 | if (z == 32) {
1756 | az = 5
1757 | } else {
1758 | if (z == 4) {
1759 | az = 2
1760 | } else {
1761 | return this.toRadix(z)
1762 | }
1763 | }
1764 | }
1765 | }
1766 | }
1767 | var aB = (1 << az) - 1,
1768 | aE,
1769 | t = false,
1770 | aC = "",
1771 | aA = this.t;
1772 | var aD = this.DB - (aA * this.DB) % az;
1773 | if (aA-->0) {
1774 | if (aD < this.DB && (aE = this[aA] >> aD) > 0) {
1775 | t = true;
1776 | aC = ay(aE)
1777 | }
1778 | while (aA >= 0) {
1779 | if (aD < az) {
1780 | aE = (this[aA] & ((1 << aD) - 1)) << (az - aD);
1781 | aE |= this[--aA] >> (aD += this.DB - az)
1782 | } else {
1783 | aE = (this[aA] >> (aD -= az)) & aB;
1784 | if (aD <= 0) {
1785 | aD += this.DB; --aA
1786 | }
1787 | }
1788 | if (aE > 0) {
1789 | t = true
1790 | }
1791 | if (t) {
1792 | aC += ay(aE)
1793 | }
1794 | }
1795 | }
1796 | return t ? aC: "0"
1797 | }
1798 |
1799 | function R() {
1800 | var t = h();
1801 | aq.ZERO.subTo(this, t);
1802 | return t
1803 | }
1804 |
1805 | function ak() {
1806 | return (this.s < 0) ? this.negate() : this
1807 | }
1808 |
1809 | function G(t) {
1810 | var az = this.s - t.s;
1811 | if (az != 0) {
1812 | return az
1813 | }
1814 | var z = this.t;
1815 | az = z - t.t;
1816 | if (az != 0) {
1817 | return az
1818 | }
1819 | while (--z >= 0) {
1820 | if ((az = this[z] - t[z]) != 0) {
1821 | return az
1822 | }
1823 | }
1824 | return 0
1825 | }
1826 |
1827 | function j(z) {
1828 | var aA = 1,
1829 | az;
1830 | if ((az = z >>> 16) != 0) {
1831 | z = az;
1832 | aA += 16
1833 | }
1834 | if ((az = z >> 8) != 0) {
1835 | z = az;
1836 | aA += 8
1837 | }
1838 | if ((az = z >> 4) != 0) {
1839 | z = az;
1840 | aA += 4
1841 | }
1842 | if ((az = z >> 2) != 0) {
1843 | z = az;
1844 | aA += 2
1845 | }
1846 | if ((az = z >> 1) != 0) {
1847 | z = az;
1848 | aA += 1
1849 | }
1850 | return aA
1851 | }
1852 |
1853 | function u() {
1854 | if (this.t <= 0) {
1855 | return 0
1856 | }
1857 | return this.DB * (this.t - 1) + j(this[this.t - 1] ^ (this.s & this.DM))
1858 | }
1859 |
1860 | function ap(az, z) {
1861 | var t;
1862 | for (t = this.t - 1; t >= 0; --t) {
1863 | z[t + az] = this[t]
1864 | }
1865 | for (t = az - 1; t >= 0; --t) {
1866 | z[t] = 0
1867 | }
1868 | z.t = this.t + az;
1869 | z.s = this.s
1870 | }
1871 |
1872 | function W(az, z) {
1873 | for (var t = az; t < this.t; ++t) {
1874 | z[t - az] = this[t]
1875 | }
1876 | z.t = Math.max(this.t - az, 0);
1877 | z.s = this.s
1878 | }
1879 |
1880 | function s(aE, aA) {
1881 | var z = aE % this.DB;
1882 | var t = this.DB - z;
1883 | var aC = (1 << t) - 1;
1884 | var aB = Math.floor(aE / this.DB),
1885 | aD = (this.s << z) & this.DM,
1886 | az;
1887 | for (az = this.t - 1; az >= 0; --az) {
1888 | aA[az + aB + 1] = (this[az] >> t) | aD;
1889 | aD = (this[az] & aC) << z
1890 | }
1891 | for (az = aB - 1; az >= 0; --az) {
1892 | aA[az] = 0
1893 | }
1894 | aA[aB] = aD;
1895 | aA.t = this.t + aB + 1;
1896 | aA.s = this.s;
1897 | aA.clamp()
1898 | }
1899 |
1900 | function l(aD, aA) {
1901 | aA.s = this.s;
1902 | var aB = Math.floor(aD / this.DB);
1903 | if (aB >= this.t) {
1904 | aA.t = 0;
1905 | return
1906 | }
1907 | var z = aD % this.DB;
1908 | var t = this.DB - z;
1909 | var aC = (1 << z) - 1;
1910 | aA[0] = this[aB] >> z;
1911 | for (var az = aB + 1; az < this.t; ++az) {
1912 | aA[az - aB - 1] |= (this[az] & aC) << t;
1913 | aA[az - aB] = this[az] >> z
1914 | }
1915 | if (z > 0) {
1916 | aA[this.t - aB - 1] |= (this.s & aC) << t
1917 | }
1918 | aA.t = this.t - aB;
1919 | aA.clamp()
1920 | }
1921 |
1922 | function aa(z, aA) {
1923 | var az = 0,
1924 | aB = 0,
1925 | t = Math.min(z.t, this.t);
1926 | while (az < t) {
1927 | aB += this[az] - z[az];
1928 | aA[az++] = aB & this.DM;
1929 | aB >>= this.DB
1930 | }
1931 | if (z.t < this.t) {
1932 | aB -= z.s;
1933 | while (az < this.t) {
1934 | aB += this[az];
1935 | aA[az++] = aB & this.DM;
1936 | aB >>= this.DB
1937 | }
1938 | aB += this.s
1939 | } else {
1940 | aB += this.s;
1941 | while (az < z.t) {
1942 | aB -= z[az];
1943 | aA[az++] = aB & this.DM;
1944 | aB >>= this.DB
1945 | }
1946 | aB -= z.s
1947 | }
1948 | aA.s = (aB < 0) ? -1 : 0;
1949 | if (aB < -1) {
1950 | aA[az++] = this.DV + aB
1951 | } else {
1952 | if (aB > 0) {
1953 | aA[az++] = aB
1954 | }
1955 | }
1956 | aA.t = az;
1957 | aA.clamp()
1958 | }
1959 |
1960 | function D(z, aA) {
1961 | var t = this.abs(),
1962 | aB = z.abs();
1963 | var az = t.t;
1964 | aA.t = az + aB.t;
1965 | while (--az >= 0) {
1966 | aA[az] = 0
1967 | }
1968 | for (az = 0; az < aB.t; ++az) {
1969 | aA[az + t.t] = t.am(0, aB[az], aA, az, 0, t.t)
1970 | }
1971 | aA.s = 0;
1972 | aA.clamp();
1973 | if (this.s != z.s) {
1974 | aq.ZERO.subTo(aA, aA)
1975 | }
1976 | }
1977 |
1978 | function Q(az) {
1979 | var t = this.abs();
1980 | var z = az.t = 2 * t.t;
1981 | while (--z >= 0) {
1982 | az[z] = 0
1983 | }
1984 | for (z = 0; z < t.t - 1; ++z) {
1985 | var aA = t.am(z, t[z], az, 2 * z, 0, 1);
1986 | if ((az[z + t.t] += t.am(z + 1, 2 * t[z], az, 2 * z + 1, aA, t.t - z - 1)) >= t.DV) {
1987 | az[z + t.t] -= t.DV;
1988 | az[z + t.t + 1] = 1
1989 | }
1990 | }
1991 | if (az.t > 0) {
1992 | az[az.t - 1] += t.am(z, t[z], az, 2 * z, 0, 1)
1993 | }
1994 | az.s = 0;
1995 | az.clamp()
1996 | }
1997 |
1998 | function E(aH, aE, aD) {
1999 | var aN = aH.abs();
2000 | if (aN.t <= 0) {
2001 | return
2002 | }
2003 | var aF = this.abs();
2004 | if (aF.t < aN.t) {
2005 | if (aE != null) {
2006 | aE.fromInt(0)
2007 | }
2008 | if (aD != null) {
2009 | this.copyTo(aD)
2010 | }
2011 | return
2012 | }
2013 | if (aD == null) {
2014 | aD = h()
2015 | }
2016 | var aB = h(),
2017 | z = this.s,
2018 | aG = aH.s;
2019 | var aM = this.DB - j(aN[aN.t - 1]);
2020 | if (aM > 0) {
2021 | aN.lShiftTo(aM, aB);
2022 | aF.lShiftTo(aM, aD)
2023 | } else {
2024 | aN.copyTo(aB);
2025 | aF.copyTo(aD)
2026 | }
2027 | var aJ = aB.t;
2028 | var az = aB[aJ - 1];
2029 | if (az == 0) {
2030 | return
2031 | }
2032 | var aI = az * (1 << this.F1) + ((aJ > 1) ? aB[aJ - 2] >> this.F2: 0);
2033 | var aQ = this.FV / aI,
2034 | aP = (1 << this.F1) / aI,
2035 | aO = 1 << this.F2;
2036 | var aL = aD.t,
2037 | aK = aL - aJ,
2038 | aC = (aE == null) ? h() : aE;
2039 | aB.dlShiftTo(aK, aC);
2040 | if (aD.compareTo(aC) >= 0) {
2041 | aD[aD.t++] = 1;
2042 | aD.subTo(aC, aD)
2043 | }
2044 | aq.ONE.dlShiftTo(aJ, aC);
2045 | aC.subTo(aB, aB);
2046 | while (aB.t < aJ) {
2047 | aB[aB.t++] = 0
2048 | }
2049 | while (--aK >= 0) {
2050 | var aA = (aD[--aL] == az) ? this.DM: Math.floor(aD[aL] * aQ + (aD[aL - 1] + aO) * aP);
2051 | if ((aD[aL] += aB.am(0, aA, aD, aK, 0, aJ)) < aA) {
2052 | aB.dlShiftTo(aK, aC);
2053 | aD.subTo(aC, aD);
2054 | while (aD[aL] < --aA) {
2055 | aD.subTo(aC, aD)
2056 | }
2057 | }
2058 | }
2059 | if (aE != null) {
2060 | aD.drShiftTo(aJ, aE);
2061 | if (z != aG) {
2062 | aq.ZERO.subTo(aE, aE)
2063 | }
2064 | }
2065 | aD.t = aJ;
2066 | aD.clamp();
2067 | if (aM > 0) {
2068 | aD.rShiftTo(aM, aD)
2069 | }
2070 | if (z < 0) {
2071 | aq.ZERO.subTo(aD, aD)
2072 | }
2073 | }
2074 |
2075 | function N(t) {
2076 | var z = h();
2077 | this.abs().divRemTo(t, null, z);
2078 | if (this.s < 0 && z.compareTo(aq.ZERO) > 0) {
2079 | t.subTo(z, z)
2080 | }
2081 | return z
2082 | }
2083 |
2084 | function K(t) {
2085 | this.m = t
2086 | }
2087 |
2088 | function U(t) {
2089 | if (t.s < 0 || t.compareTo(this.m) >= 0) {
2090 | return t.mod(this.m)
2091 | } else {
2092 | return t
2093 | }
2094 | }
2095 |
2096 | function aj(t) {
2097 | return t
2098 | }
2099 |
2100 | function J(t) {
2101 | t.divRemTo(this.m, null, t)
2102 | }
2103 |
2104 | function H(t, az, z) {
2105 | t.multiplyTo(az, z);
2106 | this.reduce(z)
2107 | }
2108 |
2109 | function at(t, z) {
2110 | t.squareTo(z);
2111 | this.reduce(z)
2112 | }
2113 |
2114 | K.prototype.convert = U;
2115 | K.prototype.revert = aj;
2116 | K.prototype.reduce = J;
2117 | K.prototype.mulTo = H;
2118 | K.prototype.sqrTo = at;
2119 | function B() {
2120 | if (this.t < 1) {
2121 | return 0
2122 | }
2123 | var t = this[0];
2124 | if ((t & 1) == 0) {
2125 | return 0
2126 | }
2127 | var z = t & 3;
2128 | z = (z * (2 - (t & 15) * z)) & 15;
2129 | z = (z * (2 - (t & 255) * z)) & 255;
2130 | z = (z * (2 - (((t & 65535) * z) & 65535))) & 65535;
2131 | z = (z * (2 - t * z % this.DV)) % this.DV;
2132 | return (z > 0) ? this.DV - z: -z
2133 | }
2134 |
2135 | function f(t) {
2136 | this.m = t;
2137 | this.mp = t.invDigit();
2138 | this.mpl = this.mp & 32767;
2139 | this.mph = this.mp >> 15;
2140 | this.um = (1 << (t.DB - 15)) - 1;
2141 | this.mt2 = 2 * t.t
2142 | }
2143 |
2144 | function ai(t) {
2145 | var z = h();
2146 | t.abs().dlShiftTo(this.m.t, z);
2147 | z.divRemTo(this.m, null, z);
2148 | if (t.s < 0 && z.compareTo(aq.ZERO) > 0) {
2149 | this.m.subTo(z, z)
2150 | }
2151 | return z
2152 | }
2153 |
2154 | function ar(t) {
2155 | var z = h();
2156 | t.copyTo(z);
2157 | this.reduce(z);
2158 | return z
2159 | }
2160 |
2161 | function P(t) {
2162 | while (t.t <= this.mt2) {
2163 | t[t.t++] = 0
2164 | }
2165 | for (var az = 0; az < this.m.t; ++az) {
2166 | var z = t[az] & 32767;
2167 | var aA = (z * this.mpl + (((z * this.mph + (t[az] >> 15) * this.mpl) & this.um) << 15)) & t.DM;
2168 | z = az + this.m.t;
2169 | t[z] += this.m.am(0, aA, t, az, 0, this.m.t);
2170 | while (t[z] >= t.DV) {
2171 | t[z] -= t.DV;
2172 | t[++z]++
2173 | }
2174 | }
2175 | t.clamp();
2176 | t.drShiftTo(this.m.t, t);
2177 | if (t.compareTo(this.m) >= 0) {
2178 | t.subTo(this.m, t)
2179 | }
2180 | }
2181 |
2182 | function al(t, z) {
2183 | t.squareTo(z);
2184 | this.reduce(z)
2185 | }
2186 |
2187 | function y(t, az, z) {
2188 | t.multiplyTo(az, z);
2189 | this.reduce(z)
2190 | }
2191 |
2192 | f.prototype.convert = ai;
2193 | f.prototype.revert = ar;
2194 | f.prototype.reduce = P;
2195 | f.prototype.mulTo = y;
2196 | f.prototype.sqrTo = al;
2197 | function i() {
2198 | return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
2199 | }
2200 |
2201 | function x(aE, aF) {
2202 | if (aE > 4294967295 || aE < 1) {
2203 | return aq.ONE
2204 | }
2205 | var aD = h(),
2206 | az = h(),
2207 | aC = aF.convert(this),
2208 | aB = j(aE) - 1;
2209 | aC.copyTo(aD);
2210 | while (--aB >= 0) {
2211 | aF.sqrTo(aD, az);
2212 | if ((aE & (1 << aB)) > 0) {
2213 | aF.mulTo(az, aC, aD)
2214 | } else {
2215 | var aA = aD;
2216 | aD = az;
2217 | az = aA
2218 | }
2219 | }
2220 | return aF.revert(aD)
2221 | }
2222 |
2223 | function am(az, t) {
2224 | var aA;
2225 | if (az < 256 || t.isEven()) {
2226 | aA = new K(t)
2227 | } else {
2228 | aA = new f(t)
2229 | }
2230 | return this.exp(az, aA)
2231 | }
2232 |
2233 | aq.prototype.copyTo = X;
2234 | aq.prototype.fromInt = n;
2235 | aq.prototype.fromString = w;
2236 | aq.prototype.clamp = O;
2237 | aq.prototype.dlShiftTo = ap;
2238 | aq.prototype.drShiftTo = W;
2239 | aq.prototype.lShiftTo = s;
2240 | aq.prototype.rShiftTo = l;
2241 | aq.prototype.subTo = aa;
2242 | aq.prototype.multiplyTo = D;
2243 | aq.prototype.squareTo = Q;
2244 | aq.prototype.divRemTo = E;
2245 | aq.prototype.invDigit = B;
2246 | aq.prototype.isEven = i;
2247 | aq.prototype.exp = x;
2248 | aq.prototype.toString = q;
2249 | aq.prototype.negate = R;
2250 | aq.prototype.abs = ak;
2251 | aq.prototype.compareTo = G;
2252 | aq.prototype.bitLength = u;
2253 | aq.prototype.mod = N;
2254 | aq.prototype.modPowInt = am;
2255 | aq.ZERO = c(0);
2256 | aq.ONE = c(1);
2257 | function k() {
2258 | this.i = 0;
2259 | this.j = 0;
2260 | this.S = new Array()
2261 | }
2262 |
2263 | function e(aB) {
2264 | var aA, z, az;
2265 | for (aA = 0; aA < 256; ++aA) {
2266 | this.S[aA] = aA
2267 | }
2268 | z = 0;
2269 | for (aA = 0; aA < 256; ++aA) {
2270 | z = (z + this.S[aA] + aB[aA % aB.length]) & 255;
2271 | az = this.S[aA];
2272 | this.S[aA] = this.S[z];
2273 | this.S[z] = az
2274 | }
2275 | this.i = 0;
2276 | this.j = 0
2277 | }
2278 |
2279 | function a() {
2280 | var z;
2281 | this.i = (this.i + 1) & 255;
2282 | this.j = (this.j + this.S[this.i]) & 255;
2283 | z = this.S[this.i];
2284 | this.S[this.i] = this.S[this.j];
2285 | this.S[this.j] = z;
2286 | return this.S[(z + this.S[this.i]) & 255]
2287 | }
2288 |
2289 | k.prototype.init = e;
2290 | k.prototype.next = a;
2291 | function an() {
2292 | return new k()
2293 | }
2294 |
2295 | var M = 256;
2296 | var m;
2297 | var T;
2298 | var ab;
2299 |
2300 | function d(t) {
2301 | T[ab++] ^= t & 255;
2302 | T[ab++] ^= (t >> 8) & 255;
2303 | T[ab++] ^= (t >> 16) & 255;
2304 | T[ab++] ^= (t >> 24) & 255;
2305 | if (ab >= M) {
2306 | ab -= M
2307 | }
2308 | }
2309 |
2310 | function S() {
2311 | d(new Date().getTime())
2312 | }
2313 |
2314 | if (T == null) {
2315 | T = new Array();
2316 | ab = 0;
2317 | var I;
2318 | if (navigator.appName == "Netscape" && navigator.appVersion < "5" && window.crypto && typeof(window.crypto.random) === "function") {
2319 | var F = window.crypto.random(32);
2320 | for (I = 0; I < F.length; ++I) {
2321 | T[ab++] = F.charCodeAt(I) & 255
2322 | }
2323 | }
2324 | while (ab < M) {
2325 | I = Math.floor(65536 * Math.random());
2326 | T[ab++] = I >>> 8;
2327 | T[ab++] = I & 255
2328 | }
2329 | ab = 0;
2330 | S()
2331 | }
2332 | function C() {
2333 | if (m == null) {
2334 | S();
2335 | m = an();
2336 | m.init(T);
2337 | for (ab = 0; ab < T.length; ++ab) {
2338 | T[ab] = 0
2339 | }
2340 | ab = 0
2341 | }
2342 | return m.next()
2343 | }
2344 |
2345 | function au(z) {
2346 | var t;
2347 | for (t = 0; t < z.length; ++t) {
2348 | z[t] = C()
2349 | }
2350 | }
2351 |
2352 | function ac() {}
2353 |
2354 | ac.prototype.nextBytes = au;
2355 | function g(z, t) {
2356 | return new aq(z, t)
2357 | }
2358 |
2359 | function ag(az, aA) {
2360 | var t = "";
2361 | var z = 0;
2362 | while (z + aA < az.length) {
2363 | t += az.substring(z, z + aA) + "\n";
2364 | z += aA
2365 | }
2366 | return t + az.substring(z, az.length)
2367 | }
2368 |
2369 | function r(t) {
2370 | if (t < 16) {
2371 | return "0" + t.toString(16)
2372 | } else {
2373 | return t.toString(16)
2374 | }
2375 | }
2376 |
2377 | function ae(aA, aD) {
2378 | if (aD < aA.length + 11) {
2379 | alert("Message too long for RSA");
2380 | return null
2381 | }
2382 | var aC = new Array();
2383 | var az = aA.length - 1;
2384 | while (az >= 0 && aD > 0) {
2385 | var aB = aA.charCodeAt(az--);
2386 | if (aB < 128) {
2387 | aC[--aD] = aB
2388 | } else {
2389 | if ((aB > 127) && (aB < 2048)) {
2390 | aC[--aD] = (aB & 63) | 128;
2391 | aC[--aD] = (aB >> 6) | 192
2392 | } else {
2393 | aC[--aD] = (aB & 63) | 128;
2394 | aC[--aD] = ((aB >> 6) & 63) | 128;
2395 | aC[--aD] = (aB >> 12) | 224
2396 | }
2397 | }
2398 | }
2399 | aC[--aD] = 0;
2400 | var z = new ac();
2401 | var t = new Array();
2402 | while (aD > 2) {
2403 | t[0] = 0;
2404 | while (t[0] == 0) {
2405 | z.nextBytes(t)
2406 | }
2407 | aC[--aD] = t[0]
2408 | }
2409 | aC[--aD] = 2;
2410 | aC[--aD] = 0;
2411 | return new aq(aC)
2412 | }
2413 |
2414 | function L() {
2415 | this.n = null;
2416 | this.e = 0;
2417 | this.d = null;
2418 | this.p = null;
2419 | this.q = null;
2420 | this.dmp1 = null;
2421 | this.dmq1 = null;
2422 | this.coeff = null
2423 | }
2424 |
2425 | function o(z, t) {
2426 | if (z != null && t != null && z.length > 0 && t.length > 0) {
2427 | this.n = g(z, 16);
2428 | this.e = parseInt(t, 16)
2429 | } else {
2430 | alert("Invalid RSA public key")
2431 | }
2432 | }
2433 |
2434 | function V(t) {
2435 | return t.modPowInt(this.e, this.n)
2436 | }
2437 |
2438 | function p(az) {
2439 | var t = ae(az, (this.n.bitLength() + 7) >> 3);
2440 | if (t == null) {
2441 | return null
2442 | }
2443 | var aA = this.doPublic(t);
2444 | if (aA == null) {
2445 | return null
2446 | }
2447 | var z = aA.toString(16);
2448 | if ((z.length & 1) == 0) {
2449 | return z
2450 | } else {
2451 | return "0" + z
2452 | }
2453 | }
2454 |
2455 | L.prototype.doPublic = V;
2456 | L.prototype.setPublic = o;
2457 | L.prototype.encrypt = p;
2458 | this.RSAKey = L
2459 | }).call(sinaSSOEncoder);
2460 |
2461 | function getsu(iphone) {
2462 | return sinaSSOEncoder.base64.encode(iphone);
2463 | }
2464 |
2465 | function getsp(key, servertime, nonce, pw) {
2466 | var f = new sinaSSOEncoder.RSAKey;
2467 | f.setPublic(key, "10001");
2468 | var b = f.encrypt(servertime + "\t" + nonce + "\n" + pw);
2469 | return b
2470 | }
--------------------------------------------------------------------------------
/新浪微博登陆2018-12-11/sinalogin.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 |
3 | import requests
4 | from json import loads
5 | import re
6 | import execjs
7 | from urllib import parse
8 |
9 | with open("./js.txt", 'r', encoding='utf-8') as f: # 打开JS文件
10 | line = f.readline()
11 | htmlstr = ''
12 | while line:
13 | htmlstr = htmlstr + line
14 | line = f.readline()
15 | jsstr = htmlstr
16 | ctx = execjs.compile(jsstr) # 加载JS文件
17 |
18 |
19 | def getsu(iphone):
20 | """
21 | 获取加密参数su
22 | :param iphone: 传入手机号
23 | :return:
24 | """
25 | iphone = parse.quote(iphone)
26 | su = ctx.call("getsu", iphone)
27 | return su
28 |
29 |
30 | def getkey(iphone):
31 | """
32 | 获取加密需要的时间戳、公钥等信息
33 | :param iphone:
34 | :return: json
35 | """
36 | su = getsu(iphone)
37 | su_url = "https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=" \
38 | "sinaSSOController.preloginCallBack&su={}%3D&rsakt" \
39 | "=mod&checkpin=1&client=ssologin.js(v1.4.19)&_=1544491300471".format(su)
40 | headers = {
41 | "Accept": "*/*",
42 | "Accept-Encoding": "gzip, deflate, br",
43 | "Accept-Language": "zh-CN,zh;q=0.9",
44 | "Connection": "keep-alive",
45 | "Cookie": "SINAGLOBAL=10.71.2.96_1537319283.25360; "
46 | "UOR=www.baidu.com,news.sina.com.cn,; "
47 | "SUB=_2AkMs_o_Sf8NxqwJRmfkVzWnma49-zgDEieKaon4JJRMyHR"
48 | "l-yD9kql4ttRB6B36hPXoG3Dc1joQANXyggWcwbJoRDfhG; "
49 | "SUBP=0033WrSXqPxfM72-Ws9jqgMF55529P9D9WhAxrOYgrYDalY30D0XuRdP;"
50 | " ULV=1541659821773:4:1:1::1540805170207; "
51 | "UM_distinctid=166f21629624c-036b343a4703ce-335e4b78-1fa400-166f216296327a; "
52 | "lxlrttp=1541383354; U_TRS1=00000057.2c29756.5c0601f9.ec750a9c;"
53 | " Apache=172.16.138.142_1544490894.221870",
54 | "Host": "login.sina.com.cn",
55 | "Referer": "https://www.weibo.com/",
56 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
57 | "(KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 "
58 | "Core/1.63.5603.400 QQBrowser/10.1.1775.400"
59 | }
60 | jsdata = requests.get(su_url, headers=headers)
61 | data = re.search('{.+}', jsdata.text).group()
62 | keys = loads(data)
63 | keys['su'] = su
64 | return keys
65 |
66 |
67 | def login(iphone, password):
68 | """
69 | 登陆程序
70 | :param iphone:
71 | :param password:
72 | :return: 登陆成功则返回用户信息json格式
73 | """
74 | keys = getkey(iphone)
75 | sp = ctx.call(
76 | "getsp", keys['pubkey'], keys['servertime'], keys['nonce'], password)
77 | data = {
78 | "entry": "weibo",
79 | "gateway": "1",
80 | "from": "",
81 | "savestate": "7",
82 | "qrcode_flag": "false",
83 | "useticket": "1",
84 | "pagerefer": "http://login.sina.com.cn/sso/logout.php?entry=miniblog&r"
85 | "=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl",
86 | "vsnf": "1",
87 | "su": keys['su'],
88 | "service": "miniblog",
89 | "servertime": keys['servertime'],
90 | "nonce": keys['nonce'],
91 | "pwencode": "rsa2",
92 | "rsakv": keys['rsakv'],
93 | "sp": sp,
94 | "sr": "1920*1080",
95 | "encoding": "UTF-8",
96 | "prelt": "44",
97 | "url": "https://www.weibo.com/ajaxlogin.php?framelogin=1&callback"
98 | "=parent.sinaSSOController.feedBackUrlCallBack",
99 | "returntype": "META"
100 | }
101 |
102 | log = requests.Session()
103 | log_url = 'https://login.sina.com.cn/sso/' \
104 | 'login.php?client=ssologin.js(v1.4.19)'
105 | page = log.post(log_url, data=data)
106 | """被重定向两次"""
107 | page.encoding = "GBK"
108 | url = re.search('replace\([\'"](.*?)[\'"]\)', page.text).group(1)
109 | page = log.post(url, data=data)
110 | page.encoding = "GBK"
111 | url = re.search('replace\([\'"](.*?)[\'"]\)', page.text).group(1)
112 | page = log.post(url, data=data)
113 | user_info = re.search('{.+}', page.text).group()
114 | user_info_json = loads(user_info)
115 | return user_info_json
116 |
117 |
118 | if __name__ == '__main__':
119 | login('1832----803', '666666')
--------------------------------------------------------------------------------
/网易云评论请求加密2018-12-12/js.txt:
--------------------------------------------------------------------------------
1 | var CryptoJS = CryptoJS ||
2 | function(u, p) {
3 | var d = {},
4 | l = d.lib = {},
5 | s = function() {},
6 | t = l.Base = {
7 | extend: function(a) {
8 | s.prototype = this;
9 | var c = new s;
10 | a && c.mixIn(a);
11 | c.hasOwnProperty("init") || (c.init = function() {
12 | c.$super.init.apply(this, arguments)
13 | });
14 | c.init.prototype = c;
15 | c.$super = this;
16 | return c
17 | },
18 | create: function() {
19 | var a = this.extend();
20 | a.init.apply(a, arguments);
21 | return a
22 | },
23 | init: function() {},
24 | mixIn: function(a) {
25 | for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]);
26 | a.hasOwnProperty("toString") && (this.toString = a.toString)
27 | },
28 | clone: function() {
29 | return this.init.prototype.extend(this)
30 | }
31 | },
32 | r = l.WordArray = t.extend({
33 | init: function(a, c) {
34 | a = this.words = a || [];
35 | this.sigBytes = c != p ? c: 4 * a.length
36 | },
37 | toString: function(a) {
38 | return (a || v).stringify(this)
39 | },
40 | concat: function(a) {
41 | var c = this.words,
42 | e = a.words,
43 | j = this.sigBytes;
44 | a = a.sigBytes;
45 | this.clamp();
46 | if (j % 4) for (var k = 0; k < a; k++) c[j + k >>> 2] |= (e[k >>> 2] >>> 24 - 8 * (k % 4) & 255) << 24 - 8 * ((j + k) % 4);
47 | else if (65535 < e.length) for (k = 0; k < a; k += 4) c[j + k >>> 2] = e[k >>> 2];
48 | else c.push.apply(c, e);
49 | this.sigBytes += a;
50 | return this
51 | },
52 | clamp: function() {
53 | var a = this.words,
54 | c = this.sigBytes;
55 | a[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4);
56 | a.length = u.ceil(c / 4)
57 | },
58 | clone: function() {
59 | var a = t.clone.call(this);
60 | a.words = this.words.slice(0);
61 | return a
62 | },
63 | random: function(a) {
64 | for (var c = [], e = 0; e < a; e += 4) c.push(4294967296 * u.random() | 0);
65 | return new r.init(c, a)
66 | }
67 | }),
68 | w = d.enc = {},
69 | v = w.Hex = {
70 | stringify: function(a) {
71 | var c = a.words;
72 | a = a.sigBytes;
73 | for (var e = [], j = 0; j < a; j++) {
74 | var k = c[j >>> 2] >>> 24 - 8 * (j % 4) & 255;
75 | e.push((k >>> 4).toString(16));
76 | e.push((k & 15).toString(16))
77 | }
78 | return e.join("")
79 | },
80 | parse: function(a) {
81 | for (var c = a.length,
82 | e = [], j = 0; j < c; j += 2) e[j >>> 3] |= parseInt(a.substr(j, 2), 16) << 24 - 4 * (j % 8);
83 | return new r.init(e, c / 2)
84 | }
85 | },
86 | b = w.Latin1 = {
87 | stringify: function(a) {
88 | var c = a.words;
89 | a = a.sigBytes;
90 | for (var e = [], j = 0; j < a; j++) e.push(String.fromCharCode(c[j >>> 2] >>> 24 - 8 * (j % 4) & 255));
91 | return e.join("")
92 | },
93 | parse: function(a) {
94 | for (var c = a.length,
95 | e = [], j = 0; j < c; j++) e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4);
96 | return new r.init(e, c)
97 | }
98 | },
99 | x = w.Utf8 = {
100 | stringify: function(a) {
101 | try {
102 | return decodeURIComponent(escape(b.stringify(a)))
103 | } catch(c) {
104 | throw Error("Malformed UTF-8 data")
105 | }
106 | },
107 | parse: function(a) {
108 | return b.parse(unescape(encodeURIComponent(a)))
109 | }
110 | },
111 | q = l.BufferedBlockAlgorithm = t.extend({
112 | reset: function() {
113 | this.i0x = new r.init;
114 | this.yf0x = 0
115 | },
116 | Bz2x: function(a) {
117 | "string" == typeof a && (a = x.parse(a));
118 | this.i0x.concat(a);
119 | this.yf0x += a.sigBytes
120 | },
121 | jg5l: function(a) {
122 | var c = this.i0x,
123 | e = c.words,
124 | j = c.sigBytes,
125 | k = this.blockSize,
126 | b = j / (4 * k),
127 | b = a ? u.ceil(b) : u.max((b | 0) - this.XA8s, 0);
128 | a = b * k;
129 | j = u.min(4 * a, j);
130 | if (a) {
131 | for (var q = 0; q < a; q += k) this.tG8y(e, q);
132 | q = e.splice(0, a);
133 | c.sigBytes -= j
134 | }
135 | return new r.init(q, j)
136 | },
137 | clone: function() {
138 | var a = t.clone.call(this);
139 | a.i0x = this.i0x.clone();
140 | return a
141 | },
142 | XA8s: 0
143 | });
144 | l.Hasher = q.extend({
145 | cfg: t.extend(),
146 | init: function(a) {
147 | this.cfg = this.cfg.extend(a);
148 | this.reset()
149 | },
150 | reset: function() {
151 | q.reset.call(this);
152 | this.mi6c()
153 | },
154 | update: function(a) {
155 | this.Bz2x(a);
156 | this.jg5l();
157 | return this
158 | },
159 | finalize: function(a) {
160 | a && this.Bz2x(a);
161 | return this.nJ6D()
162 | },
163 | blockSize: 16,
164 | my6s: function(a) {
165 | return function(b, e) {
166 | return (new a.init(e)).finalize(b)
167 | }
168 | },
169 | yg0x: function(a) {
170 | return function(b, e) {
171 | return (new n.HMAC.init(a, e)).finalize(b)
172 | }
173 | }
174 | });
175 | var n = d.algo = {};
176 | return d
177 | } (Math); (function() {
178 | var u = CryptoJS,
179 | p = u.lib.WordArray;
180 | u.enc.Base64 = {
181 | stringify: function(d) {
182 | var l = d.words,
183 | p = d.sigBytes,
184 | t = this.bA1x;
185 | d.clamp();
186 | d = [];
187 | for (var r = 0; r < p; r += 3) for (var w = (l[r >>> 2] >>> 24 - 8 * (r % 4) & 255) << 16 | (l[r + 1 >>> 2] >>> 24 - 8 * ((r + 1) % 4) & 255) << 8 | l[r + 2 >>> 2] >>> 24 - 8 * ((r + 2) % 4) & 255, v = 0; 4 > v && r + .75 * v < p; v++) d.push(t.charAt(w >>> 6 * (3 - v) & 63));
188 | if (l = t.charAt(64)) for (; d.length % 4;) d.push(l);
189 | return d.join("")
190 | },
191 | parse: function(d) {
192 | var l = d.length,
193 | s = this.bA1x,
194 | t = s.charAt(64);
195 | t && (t = d.indexOf(t), -1 != t && (l = t));
196 | for (var t = [], r = 0, w = 0; w < l; w++) if (w % 4) {
197 | var v = s.indexOf(d.charAt(w - 1)) << 2 * (w % 4),
198 | b = s.indexOf(d.charAt(w)) >>> 6 - 2 * (w % 4);
199 | t[r >>> 2] |= (v | b) << 24 - 8 * (r % 4);
200 | r++
201 | }
202 | return p.create(t, r)
203 | },
204 | bA1x: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
205 | }
206 | })(); (function(u) {
207 | function p(b, n, a, c, e, j, k) {
208 | b = b + (n & a | ~n & c) + e + k;
209 | return (b << j | b >>> 32 - j) + n
210 | }
211 | function d(b, n, a, c, e, j, k) {
212 | b = b + (n & c | a & ~c) + e + k;
213 | return (b << j | b >>> 32 - j) + n
214 | }
215 | function l(b, n, a, c, e, j, k) {
216 | b = b + (n ^ a ^ c) + e + k;
217 | return (b << j | b >>> 32 - j) + n
218 | }
219 | function s(b, n, a, c, e, j, k) {
220 | b = b + (a ^ (n | ~c)) + e + k;
221 | return (b << j | b >>> 32 - j) + n
222 | }
223 | for (var t = CryptoJS,
224 | r = t.lib,
225 | w = r.WordArray,
226 | v = r.Hasher,
227 | r = t.algo,
228 | b = [], x = 0; 64 > x; x++) b[x] = 4294967296 * u.abs(u.sin(x + 1)) | 0;
229 | r = r.MD5 = v.extend({
230 | mi6c: function() {
231 | this.cS2x = new w.init([1732584193, 4023233417, 2562383102, 271733878])
232 | },
233 | tG8y: function(q, n) {
234 | for (var a = 0; 16 > a; a++) {
235 | var c = n + a,
236 | e = q[c];
237 | q[c] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360
238 | }
239 | var a = this.cS2x.words,
240 | c = q[n + 0],
241 | e = q[n + 1],
242 | j = q[n + 2],
243 | k = q[n + 3],
244 | z = q[n + 4],
245 | r = q[n + 5],
246 | t = q[n + 6],
247 | w = q[n + 7],
248 | v = q[n + 8],
249 | A = q[n + 9],
250 | B = q[n + 10],
251 | C = q[n + 11],
252 | u = q[n + 12],
253 | D = q[n + 13],
254 | E = q[n + 14],
255 | x = q[n + 15],
256 | f = a[0],
257 | m = a[1],
258 | g = a[2],
259 | h = a[3],
260 | f = p(f, m, g, h, c, 7, b[0]),
261 | h = p(h, f, m, g, e, 12, b[1]),
262 | g = p(g, h, f, m, j, 17, b[2]),
263 | m = p(m, g, h, f, k, 22, b[3]),
264 | f = p(f, m, g, h, z, 7, b[4]),
265 | h = p(h, f, m, g, r, 12, b[5]),
266 | g = p(g, h, f, m, t, 17, b[6]),
267 | m = p(m, g, h, f, w, 22, b[7]),
268 | f = p(f, m, g, h, v, 7, b[8]),
269 | h = p(h, f, m, g, A, 12, b[9]),
270 | g = p(g, h, f, m, B, 17, b[10]),
271 | m = p(m, g, h, f, C, 22, b[11]),
272 | f = p(f, m, g, h, u, 7, b[12]),
273 | h = p(h, f, m, g, D, 12, b[13]),
274 | g = p(g, h, f, m, E, 17, b[14]),
275 | m = p(m, g, h, f, x, 22, b[15]),
276 | f = d(f, m, g, h, e, 5, b[16]),
277 | h = d(h, f, m, g, t, 9, b[17]),
278 | g = d(g, h, f, m, C, 14, b[18]),
279 | m = d(m, g, h, f, c, 20, b[19]),
280 | f = d(f, m, g, h, r, 5, b[20]),
281 | h = d(h, f, m, g, B, 9, b[21]),
282 | g = d(g, h, f, m, x, 14, b[22]),
283 | m = d(m, g, h, f, z, 20, b[23]),
284 | f = d(f, m, g, h, A, 5, b[24]),
285 | h = d(h, f, m, g, E, 9, b[25]),
286 | g = d(g, h, f, m, k, 14, b[26]),
287 | m = d(m, g, h, f, v, 20, b[27]),
288 | f = d(f, m, g, h, D, 5, b[28]),
289 | h = d(h, f, m, g, j, 9, b[29]),
290 | g = d(g, h, f, m, w, 14, b[30]),
291 | m = d(m, g, h, f, u, 20, b[31]),
292 | f = l(f, m, g, h, r, 4, b[32]),
293 | h = l(h, f, m, g, v, 11, b[33]),
294 | g = l(g, h, f, m, C, 16, b[34]),
295 | m = l(m, g, h, f, E, 23, b[35]),
296 | f = l(f, m, g, h, e, 4, b[36]),
297 | h = l(h, f, m, g, z, 11, b[37]),
298 | g = l(g, h, f, m, w, 16, b[38]),
299 | m = l(m, g, h, f, B, 23, b[39]),
300 | f = l(f, m, g, h, D, 4, b[40]),
301 | h = l(h, f, m, g, c, 11, b[41]),
302 | g = l(g, h, f, m, k, 16, b[42]),
303 | m = l(m, g, h, f, t, 23, b[43]),
304 | f = l(f, m, g, h, A, 4, b[44]),
305 | h = l(h, f, m, g, u, 11, b[45]),
306 | g = l(g, h, f, m, x, 16, b[46]),
307 | m = l(m, g, h, f, j, 23, b[47]),
308 | f = s(f, m, g, h, c, 6, b[48]),
309 | h = s(h, f, m, g, w, 10, b[49]),
310 | g = s(g, h, f, m, E, 15, b[50]),
311 | m = s(m, g, h, f, r, 21, b[51]),
312 | f = s(f, m, g, h, u, 6, b[52]),
313 | h = s(h, f, m, g, k, 10, b[53]),
314 | g = s(g, h, f, m, B, 15, b[54]),
315 | m = s(m, g, h, f, e, 21, b[55]),
316 | f = s(f, m, g, h, v, 6, b[56]),
317 | h = s(h, f, m, g, x, 10, b[57]),
318 | g = s(g, h, f, m, t, 15, b[58]),
319 | m = s(m, g, h, f, D, 21, b[59]),
320 | f = s(f, m, g, h, z, 6, b[60]),
321 | h = s(h, f, m, g, C, 10, b[61]),
322 | g = s(g, h, f, m, j, 15, b[62]),
323 | m = s(m, g, h, f, A, 21, b[63]);
324 | a[0] = a[0] + f | 0;
325 | a[1] = a[1] + m | 0;
326 | a[2] = a[2] + g | 0;
327 | a[3] = a[3] + h | 0
328 | },
329 | nJ6D: function() {
330 | var b = this.i0x,
331 | n = b.words,
332 | a = 8 * this.yf0x,
333 | c = 8 * b.sigBytes;
334 | n[c >>> 5] |= 128 << 24 - c % 32;
335 | var e = u.floor(a / 4294967296);
336 | n[(c + 64 >>> 9 << 4) + 15] = (e << 8 | e >>> 24) & 16711935 | (e << 24 | e >>> 8) & 4278255360;
337 | n[(c + 64 >>> 9 << 4) + 14] = (a << 8 | a >>> 24) & 16711935 | (a << 24 | a >>> 8) & 4278255360;
338 | b.sigBytes = 4 * (n.length + 1);
339 | this.jg5l();
340 | b = this.cS2x;
341 | n = b.words;
342 | for (a = 0; 4 > a; a++) c = n[a],
343 | n[a] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;
344 | return b
345 | },
346 | clone: function() {
347 | var b = v.clone.call(this);
348 | b.cS2x = this.cS2x.clone();
349 | return b
350 | }
351 | });
352 | t.MD5 = v.my6s(r);
353 | t.HmacMD5 = v.yg0x(r)
354 | })(Math); (function() {
355 | var u = CryptoJS,
356 | p = u.lib,
357 | d = p.Base,
358 | l = p.WordArray,
359 | p = u.algo,
360 | s = p.EvpKDF = d.extend({
361 | cfg: d.extend({
362 | keySize: 4,
363 | hasher: p.MD5,
364 | iterations: 1
365 | }),
366 | init: function(d) {
367 | this.cfg = this.cfg.extend(d)
368 | },
369 | compute: function(d, r) {
370 | for (var p = this.cfg,
371 | s = p.hasher.create(), b = l.create(), u = b.words, q = p.keySize, p = p.iterations; u.length < q;) {
372 | n && s.update(n);
373 | var n = s.update(d).finalize(r);
374 | s.reset();
375 | for (var a = 1; a < p; a++) n = s.finalize(n),
376 | s.reset();
377 | b.concat(n)
378 | }
379 | b.sigBytes = 4 * q;
380 | return b
381 | }
382 | });
383 | u.EvpKDF = function(d, l, p) {
384 | return s.create(p).compute(d, l)
385 | }
386 | })();
387 | CryptoJS.lib.Cipher ||
388 | function(u) {
389 | var p = CryptoJS,
390 | d = p.lib,
391 | l = d.Base,
392 | s = d.WordArray,
393 | t = d.BufferedBlockAlgorithm,
394 | r = p.enc.Base64,
395 | w = p.algo.EvpKDF,
396 | v = d.Cipher = t.extend({
397 | cfg: l.extend(),
398 | createEncryptor: function(e, a) {
399 | return this.create(this.GG3x, e, a)
400 | },
401 | createDecryptor: function(e, a) {
402 | return this.create(this.bro4s, e, a)
403 | },
404 | init: function(e, a, b) {
405 | this.cfg = this.cfg.extend(b);
406 | this.Xy8q = e;
407 | this.K0x = a;
408 | this.reset()
409 | },
410 | reset: function() {
411 | t.reset.call(this);
412 | this.mi6c()
413 | },
414 | process: function(e) {
415 | this.Bz2x(e);
416 | return this.jg5l()
417 | },
418 | finalize: function(e) {
419 | e && this.Bz2x(e);
420 | return this.nJ6D()
421 | },
422 | keySize: 4,
423 | ivSize: 4,
424 | GG3x: 1,
425 | bro4s: 2,
426 | my6s: function(e) {
427 | return {
428 | encrypt: function(b, k, d) {
429 | return ("string" == typeof k ? c: a).encrypt(e, b, k, d)
430 | },
431 | decrypt: function(b, k, d) {
432 | return ("string" == typeof k ? c: a).decrypt(e, b, k, d)
433 | }
434 | }
435 | }
436 | });
437 | d.StreamCipher = v.extend({
438 | nJ6D: function() {
439 | return this.jg5l(!0)
440 | },
441 | blockSize: 1
442 | });
443 | var b = p.mode = {},
444 | x = function(e, a, b) {
445 | var c = this.tJ8B;
446 | c ? this.tJ8B = u: c = this.Dl2x;
447 | for (var d = 0; d < b; d++) e[a + d] ^= c[d]
448 | },
449 | q = (d.BlockCipherMode = l.extend({
450 | createEncryptor: function(e, a) {
451 | return this.Encryptor.create(e, a)
452 | },
453 | createDecryptor: function(e, a) {
454 | return this.Decryptor.create(e, a)
455 | },
456 | init: function(e, a) {
457 | this.uM9D = e;
458 | this.tJ8B = a
459 | }
460 | })).extend();
461 | q.Encryptor = q.extend({
462 | processBlock: function(e, a) {
463 | var b = this.uM9D,
464 | c = b.blockSize;
465 | x.call(this, e, a, c);
466 | b.encryptBlock(e, a);
467 | this.Dl2x = e.slice(a, a + c)
468 | }
469 | });
470 | q.Decryptor = q.extend({
471 | processBlock: function(e, a) {
472 | var b = this.uM9D,
473 | c = b.blockSize,
474 | d = e.slice(a, a + c);
475 | b.decryptBlock(e, a);
476 | x.call(this, e, a, c);
477 | this.Dl2x = d
478 | }
479 | });
480 | b = b.CBC = q;
481 | q = (p.pad = {}).Pkcs7 = {
482 | pad: function(a, b) {
483 | for (var c = 4 * b,
484 | c = c - a.sigBytes % c,
485 | d = c << 24 | c << 16 | c << 8 | c,
486 | l = [], n = 0; n < c; n += 4) l.push(d);
487 | c = s.create(l, c);
488 | a.concat(c)
489 | },
490 | unpad: function(a) {
491 | a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
492 | }
493 | };
494 | d.BlockCipher = v.extend({
495 | cfg: v.cfg.extend({
496 | mode: b,
497 | padding: q
498 | }),
499 | reset: function() {
500 | v.reset.call(this);
501 | var a = this.cfg,
502 | b = a.iv,
503 | a = a.mode;
504 | if (this.Xy8q == this.GG3x) var c = a.createEncryptor;
505 | else c = a.createDecryptor,
506 | this.XA8s = 1;
507 | this.eK3x = c.call(a, this, b && b.words)
508 | },
509 | tG8y: function(a, b) {
510 | this.eK3x.processBlock(a, b)
511 | },
512 | nJ6D: function() {
513 | var a = this.cfg.padding;
514 | if (this.Xy8q == this.GG3x) {
515 | a.pad(this.i0x, this.blockSize);
516 | var b = this.jg5l(!0)
517 | } else b = this.jg5l(!0),
518 | a.unpad(b);
519 | return b
520 | },
521 | blockSize: 4
522 | });
523 | var n = d.CipherParams = l.extend({
524 | init: function(a) {
525 | this.mixIn(a)
526 | },
527 | toString: function(a) {
528 | return (a || this.formatter).stringify(this)
529 | }
530 | }),
531 | b = (p.format = {}).OpenSSL = {
532 | stringify: function(a) {
533 | var b = a.ciphertext;
534 | a = a.salt;
535 | return (a ? s.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r)
536 | },
537 | parse: function(a) {
538 | a = r.parse(a);
539 | var b = a.words;
540 | if (1398893684 == b[0] && 1701076831 == b[1]) {
541 | var c = s.create(b.slice(2, 4));
542 | b.splice(0, 4);
543 | a.sigBytes -= 16
544 | }
545 | return n.create({
546 | ciphertext: a,
547 | salt: c
548 | })
549 | }
550 | },
551 | a = d.SerializableCipher = l.extend({
552 | cfg: l.extend({
553 | format: b
554 | }),
555 | encrypt: function(a, b, c, d) {
556 | d = this.cfg.extend(d);
557 | var l = a.createEncryptor(c, d);
558 | b = l.finalize(b);
559 | l = l.cfg;
560 | return n.create({
561 | ciphertext: b,
562 | key: c,
563 | iv: l.iv,
564 | algorithm: a,
565 | mode: l.mode,
566 | padding: l.padding,
567 | blockSize: a.blockSize,
568 | formatter: d.format
569 | })
570 | },
571 | decrypt: function(a, b, c, d) {
572 | d = this.cfg.extend(d);
573 | b = this.Gw3x(b, d.format);
574 | return a.createDecryptor(c, d).finalize(b.ciphertext)
575 | },
576 | Gw3x: function(a, b) {
577 | return "string" == typeof a ? b.parse(a, this) : a
578 | }
579 | }),
580 | p = (p.kdf = {}).OpenSSL = {
581 | execute: function(a, b, c, d) {
582 | d || (d = s.random(8));
583 | a = w.create({
584 | keySize: b + c
585 | }).compute(a, d);
586 | c = s.create(a.words.slice(b), 4 * c);
587 | a.sigBytes = 4 * b;
588 | return n.create({
589 | key: a,
590 | iv: c,
591 | salt: d
592 | })
593 | }
594 | },
595 | c = d.PasswordBasedCipher = a.extend({
596 | cfg: a.cfg.extend({
597 | kdf: p
598 | }),
599 | encrypt: function(b, c, d, l) {
600 | l = this.cfg.extend(l);
601 | d = l.kdf.execute(d, b.keySize, b.ivSize);
602 | l.iv = d.iv;
603 | b = a.encrypt.call(this, b, c, d.key, l);
604 | b.mixIn(d);
605 | return b
606 | },
607 | decrypt: function(b, c, d, l) {
608 | l = this.cfg.extend(l);
609 | c = this.Gw3x(c, l.format);
610 | d = l.kdf.execute(d, b.keySize, b.ivSize, c.salt);
611 | l.iv = d.iv;
612 | return a.decrypt.call(this, b, c, d.key, l)
613 | }
614 | })
615 | } (); (function() {
616 | for (var u = CryptoJS,
617 | p = u.lib.BlockCipher,
618 | d = u.algo,
619 | l = [], s = [], t = [], r = [], w = [], v = [], b = [], x = [], q = [], n = [], a = [], c = 0; 256 > c; c++) a[c] = 128 > c ? c << 1 : c << 1 ^ 283;
620 | for (var e = 0,
621 | j = 0,
622 | c = 0; 256 > c; c++) {
623 | var k = j ^ j << 1 ^ j << 2 ^ j << 3 ^ j << 4,
624 | k = k >>> 8 ^ k & 255 ^ 99;
625 | l[e] = k;
626 | s[k] = e;
627 | var z = a[e],
628 | F = a[z],
629 | G = a[F],
630 | y = 257 * a[k] ^ 16843008 * k;
631 | t[e] = y << 24 | y >>> 8;
632 | r[e] = y << 16 | y >>> 16;
633 | w[e] = y << 8 | y >>> 24;
634 | v[e] = y;
635 | y = 16843009 * G ^ 65537 * F ^ 257 * z ^ 16843008 * e;
636 | b[k] = y << 24 | y >>> 8;
637 | x[k] = y << 16 | y >>> 16;
638 | q[k] = y << 8 | y >>> 24;
639 | n[k] = y;
640 | e ? (e = z ^ a[a[a[G ^ z]]], j ^= a[a[j]]) : e = j = 1
641 | }
642 | var H = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54],
643 | d = d.AES = p.extend({
644 | mi6c: function() {
645 | for (var a = this.K0x,
646 | c = a.words,
647 | d = a.sigBytes / 4,
648 | a = 4 * ((this.Zb9S = d + 6) + 1), e = this.brD4H = [], j = 0; j < a; j++) if (j < d) e[j] = c[j];
649 | else {
650 | var k = e[j - 1];
651 | j % d ? 6 < d && 4 == j % d && (k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255]) : (k = k << 8 | k >>> 24, k = l[k >>> 24] << 24 | l[k >>> 16 & 255] << 16 | l[k >>> 8 & 255] << 8 | l[k & 255], k ^= H[j / d | 0] << 24);
652 | e[j] = e[j - d] ^ k
653 | }
654 | c = this.brG4K = [];
655 | for (d = 0; d < a; d++) j = a - d,
656 | k = d % 4 ? e[j] : e[j - 4],
657 | c[d] = 4 > d || 4 >= j ? k: b[l[k >>> 24]] ^ x[l[k >>> 16 & 255]] ^ q[l[k >>> 8 & 255]] ^ n[l[k & 255]]
658 | },
659 | encryptBlock: function(a, b) {
660 | this.Di2x(a, b, this.brD4H, t, r, w, v, l)
661 | },
662 | decryptBlock: function(a, c) {
663 | var d = a[c + 1];
664 | a[c + 1] = a[c + 3];
665 | a[c + 3] = d;
666 | this.Di2x(a, c, this.brG4K, b, x, q, n, s);
667 | d = a[c + 1];
668 | a[c + 1] = a[c + 3];
669 | a[c + 3] = d
670 | },
671 | Di2x: function(a, b, c, d, e, j, l, f) {
672 | for (var m = this.Zb9S,
673 | g = a[b] ^ c[0], h = a[b + 1] ^ c[1], k = a[b + 2] ^ c[2], n = a[b + 3] ^ c[3], p = 4, r = 1; r < m; r++) var q = d[g >>> 24] ^ e[h >>> 16 & 255] ^ j[k >>> 8 & 255] ^ l[n & 255] ^ c[p++],
674 | s = d[h >>> 24] ^ e[k >>> 16 & 255] ^ j[n >>> 8 & 255] ^ l[g & 255] ^ c[p++],
675 | t = d[k >>> 24] ^ e[n >>> 16 & 255] ^ j[g >>> 8 & 255] ^ l[h & 255] ^ c[p++],
676 | n = d[n >>> 24] ^ e[g >>> 16 & 255] ^ j[h >>> 8 & 255] ^ l[k & 255] ^ c[p++],
677 | g = q,
678 | h = s,
679 | k = t;
680 | q = (f[g >>> 24] << 24 | f[h >>> 16 & 255] << 16 | f[k >>> 8 & 255] << 8 | f[n & 255]) ^ c[p++];
681 | s = (f[h >>> 24] << 24 | f[k >>> 16 & 255] << 16 | f[n >>> 8 & 255] << 8 | f[g & 255]) ^ c[p++];
682 | t = (f[k >>> 24] << 24 | f[n >>> 16 & 255] << 16 | f[g >>> 8 & 255] << 8 | f[h & 255]) ^ c[p++];
683 | n = (f[n >>> 24] << 24 | f[g >>> 16 & 255] << 16 | f[h >>> 8 & 255] << 8 | f[k & 255]) ^ c[p++];
684 | a[b] = q;
685 | a[b + 1] = s;
686 | a[b + 2] = t;
687 | a[b + 3] = n
688 | },
689 | keySize: 8
690 | });
691 | u.AES = p.my6s(d)
692 | })();
693 | function RSAKeyPair(a, b, c) {
694 | this.e = biFromHex(a),
695 | this.d = biFromHex(b),
696 | this.m = biFromHex(c),
697 | this.chunkSize = 2 * biHighIndex(this.m),
698 | this.radix = 16,
699 | this.barrett = new BarrettMu(this.m)
700 | }
701 | function twoDigit(a) {
702 | return (10 > a ? "0": "") + String(a)
703 | }
704 | function encryptedString(a, b) {
705 | for (var f, g, h, i, j, k, l, c = new Array,
706 | d = b.length,
707 | e = 0; d > e;) c[e] = b.charCodeAt(e),
708 | e++;
709 | for (; 0 != c.length % a.chunkSize;) c[e++] = 0;
710 | for (f = c.length, g = "", e = 0; f > e; e += a.chunkSize) {
711 | for (j = new BigInt, h = 0, i = e; i < e + a.chunkSize; ++h) j.digits[h] = c[i++],
712 | j.digits[h] += c[i++] << 8;
713 | k = a.barrett.powMod(j, a.e),
714 | l = 16 == a.radix ? biToHex(k) : biToString(k, a.radix),
715 | g += l + " "
716 | }
717 | return g.substring(0, g.length - 1)
718 | }
719 | function decryptedString(a, b) {
720 | var e, f, g, h, c = b.split(" "),
721 | d = "";
722 | for (e = 0; e < c.length; ++e) for (h = 16 == a.radix ? biFromHex(c[e]) : biFromString(c[e], a.radix), g = a.barrett.powMod(h, a.d), f = 0; f <= biHighIndex(g); ++f) d += String.fromCharCode(255 & g.digits[f], g.digits[f] >> 8);
723 | return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)),
724 | d
725 | }
726 | function setMaxDigits(a) {
727 | maxDigits = a,
728 | ZERO_ARRAY = new Array(maxDigits);
729 | for (var b = 0; b < ZERO_ARRAY.length; b++) ZERO_ARRAY[b] = 0;
730 | bigZero = new BigInt,
731 | bigOne = new BigInt,
732 | bigOne.digits[0] = 1
733 | }
734 | function BigInt(a) {
735 | this.digits = "boolean" == typeof a && 1 == a ? null: ZERO_ARRAY.slice(0),
736 | this.isNeg = !1
737 | }
738 | function biFromDecimal(a) {
739 | for (var d, e, f, b = "-" == a.charAt(0), c = b ? 1 : 0; c < a.length && "0" == a.charAt(c);)++c;
740 | if (c == a.length) d = new BigInt;
741 | else {
742 | for (e = a.length - c, f = e % dpl10, 0 == f && (f = dpl10), d = biFromNumber(Number(a.substr(c, f))), c += f; c < a.length;) d = biAdd(biMultiply(d, lr10), biFromNumber(Number(a.substr(c, dpl10)))),
743 | c += dpl10;
744 | d.isNeg = b
745 | }
746 | return d
747 | }
748 | function biCopy(a) {
749 | var b = new BigInt(!0);
750 | return b.digits = a.digits.slice(0),
751 | b.isNeg = a.isNeg,
752 | b
753 | }
754 | function biFromNumber(a) {
755 | var c, b = new BigInt;
756 | for (b.isNeg = 0 > a, a = Math.abs(a), c = 0; a > 0;) b.digits[c++] = a & maxDigitVal,
757 | a >>= biRadixBits;
758 | return b
759 | }
760 | function reverseStr(a) {
761 | var c, b = "";
762 | for (c = a.length - 1; c > -1; --c) b += a.charAt(c);
763 | return b
764 | }
765 | function biToString(a, b) {
766 | var d, e, c = new BigInt;
767 | for (c.digits[0] = b, d = biDivideModulo(a, c), e = hexatrigesimalToChar[d[1].digits[0]]; 1 == biCompare(d[0], bigZero);) d = biDivideModulo(d[0], c),
768 | digit = d[1].digits[0],
769 | e += hexatrigesimalToChar[d[1].digits[0]];
770 | return (a.isNeg ? "-": "") + reverseStr(e)
771 | }
772 | function biToDecimal(a) {
773 | var c, d, b = new BigInt;
774 | for (b.digits[0] = 10, c = biDivideModulo(a, b), d = String(c[1].digits[0]); 1 == biCompare(c[0], bigZero);) c = biDivideModulo(c[0], b),
775 | d += String(c[1].digits[0]);
776 | return (a.isNeg ? "-": "") + reverseStr(d)
777 | }
778 | function digitToHex(a) {
779 | var b = 15,
780 | c = "";
781 | for (i = 0; 4 > i; ++i) c += hexToChar[a & b],
782 | a >>>= 4;
783 | return reverseStr(c)
784 | }
785 | function biToHex(a) {
786 | var d, b = "";
787 | for (biHighIndex(a), d = biHighIndex(a); d > -1; --d) b += digitToHex(a.digits[d]);
788 | return b
789 | }
790 | function charToHex(a) {
791 | var h, b = 48,
792 | c = b + 9,
793 | d = 97,
794 | e = d + 25,
795 | f = 65,
796 | g = 90;
797 | return h = a >= b && c >= a ? a - b: a >= f && g >= a ? 10 + a - f: a >= d && e >= a ? 10 + a - d: 0
798 | }
799 | function hexToDigit(a) {
800 | var d, b = 0,
801 | c = Math.min(a.length, 4);
802 | for (d = 0; c > d; ++d) b <<= 4,
803 | b |= charToHex(a.charCodeAt(d));
804 | return b
805 | }
806 | function biFromHex(a) {
807 | var d, e, b = new BigInt,
808 | c = a.length;
809 | for (d = c, e = 0; d > 0; d -= 4, ++e) b.digits[e] = hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4)));
810 | return b
811 | }
812 | function biFromString(a, b) {
813 | var g, h, i, j, c = "-" == a.charAt(0),
814 | d = c ? 1 : 0,
815 | e = new BigInt,
816 | f = new BigInt;
817 | for (f.digits[0] = 1, g = a.length - 1; g >= d; g--) h = a.charCodeAt(g),
818 | i = charToHex(h),
819 | j = biMultiplyDigit(f, i),
820 | e = biAdd(e, j),
821 | f = biMultiplyDigit(f, b);
822 | return e.isNeg = c,
823 | e
824 | }
825 | function biDump(a) {
826 | return (a.isNeg ? "-": "") + a.digits.join(" ")
827 | }
828 | function biAdd(a, b) {
829 | var c, d, e, f;
830 | if (a.isNeg != b.isNeg) b.isNeg = !b.isNeg,
831 | c = biSubtract(a, b),
832 | b.isNeg = !b.isNeg;
833 | else {
834 | for (c = new BigInt, d = 0, f = 0; f < a.digits.length; ++f) e = a.digits[f] + b.digits[f] + d,
835 | c.digits[f] = 65535 & e,
836 | d = Number(e >= biRadix);
837 | c.isNeg = a.isNeg
838 | }
839 | return c
840 | }
841 | function biSubtract(a, b) {
842 | var c, d, e, f;
843 | if (a.isNeg != b.isNeg) b.isNeg = !b.isNeg,
844 | c = biAdd(a, b),
845 | b.isNeg = !b.isNeg;
846 | else {
847 | for (c = new BigInt, e = 0, f = 0; f < a.digits.length; ++f) d = a.digits[f] - b.digits[f] + e,
848 | c.digits[f] = 65535 & d,
849 | c.digits[f] < 0 && (c.digits[f] += biRadix),
850 | e = 0 - Number(0 > d);
851 | if ( - 1 == e) {
852 | for (e = 0, f = 0; f < a.digits.length; ++f) d = 0 - c.digits[f] + e,
853 | c.digits[f] = 65535 & d,
854 | c.digits[f] < 0 && (c.digits[f] += biRadix),
855 | e = 0 - Number(0 > d);
856 | c.isNeg = !a.isNeg
857 | } else c.isNeg = a.isNeg
858 | }
859 | return c
860 | }
861 | function biHighIndex(a) {
862 | for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b];)--b;
863 | return b
864 | }
865 | function biNumBits(a) {
866 | var e, b = biHighIndex(a),
867 | c = a.digits[b],
868 | d = (b + 1) * bitsPerDigit;
869 | for (e = d; e > d - bitsPerDigit && 0 == (32768 & c); --e) c <<= 1;
870 | return e
871 | }
872 | function biMultiply(a, b) {
873 | var d, h, i, k, c = new BigInt,
874 | e = biHighIndex(a),
875 | f = biHighIndex(b);
876 | for (k = 0; f >= k; ++k) {
877 | for (d = 0, i = k, j = 0; e >= j; ++j, ++i) h = c.digits[i] + a.digits[j] * b.digits[k] + d,
878 | c.digits[i] = h & maxDigitVal,
879 | d = h >>> biRadixBits;
880 | c.digits[k + e + 1] = d
881 | }
882 | return c.isNeg = a.isNeg != b.isNeg,
883 | c
884 | }
885 | function biMultiplyDigit(a, b) {
886 | var c, d, e, f;
887 | for (result = new BigInt, c = biHighIndex(a), d = 0, f = 0; c >= f; ++f) e = result.digits[f] + a.digits[f] * b + d,
888 | result.digits[f] = e & maxDigitVal,
889 | d = e >>> biRadixBits;
890 | return result.digits[1 + c] = d,
891 | result
892 | }
893 | function arrayCopy(a, b, c, d, e) {
894 | var g, h, f = Math.min(b + e, a.length);
895 | for (g = b, h = d; f > g; ++g, ++h) c[h] = a[g]
896 | }
897 | function biShiftLeft(a, b) {
898 | var e, f, g, h, c = Math.floor(b / bitsPerDigit),
899 | d = new BigInt;
900 | for (arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c), e = b % bitsPerDigit, f = bitsPerDigit - e, g = d.digits.length - 1, h = g - 1; g > 0; --g, --h) d.digits[g] = d.digits[g] << e & maxDigitVal | (d.digits[h] & highBitMasks[e]) >>> f;
901 | return d.digits[0] = d.digits[g] << e & maxDigitVal,
902 | d.isNeg = a.isNeg,
903 | d
904 | }
905 | function biShiftRight(a, b) {
906 | var e, f, g, h, c = Math.floor(b / bitsPerDigit),
907 | d = new BigInt;
908 | for (arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c), e = b % bitsPerDigit, f = bitsPerDigit - e, g = 0, h = g + 1; g < d.digits.length - 1; ++g, ++h) d.digits[g] = d.digits[g] >>> e | (d.digits[h] & lowBitMasks[e]) << f;
909 | return d.digits[d.digits.length - 1] >>>= e,
910 | d.isNeg = a.isNeg,
911 | d
912 | }
913 | function biMultiplyByRadixPower(a, b) {
914 | var c = new BigInt;
915 | return arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b),
916 | c
917 | }
918 | function biDivideByRadixPower(a, b) {
919 | var c = new BigInt;
920 | return arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b),
921 | c
922 | }
923 | function biModuloByRadixPower(a, b) {
924 | var c = new BigInt;
925 | return arrayCopy(a.digits, 0, c.digits, 0, b),
926 | c
927 | }
928 | function biCompare(a, b) {
929 | if (a.isNeg != b.isNeg) return 1 - 2 * Number(a.isNeg);
930 | for (var c = a.digits.length - 1; c >= 0; --c) if (a.digits[c] != b.digits[c]) return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]);
931 | return 0
932 | }
933 | function biDivideModulo(a, b) {
934 | var f, g, h, i, j, k, l, m, n, o, p, q, r, s, c = biNumBits(a),
935 | d = biNumBits(b),
936 | e = b.isNeg;
937 | if (d > c) return a.isNeg ? (f = biCopy(bigOne), f.isNeg = !b.isNeg, a.isNeg = !1, b.isNeg = !1, g = biSubtract(b, a), a.isNeg = !0, b.isNeg = e) : (f = new BigInt, g = biCopy(a)),
938 | new Array(f, g);
939 | for (f = new BigInt, g = a, h = Math.ceil(d / bitsPerDigit) - 1, i = 0; b.digits[h] < biHalfRadix;) b = biShiftLeft(b, 1),
940 | ++i,
941 | ++d,
942 | h = Math.ceil(d / bitsPerDigit) - 1;
943 | for (g = biShiftLeft(g, i), c += i, j = Math.ceil(c / bitsPerDigit) - 1, k = biMultiplyByRadixPower(b, j - h); - 1 != biCompare(g, k);)++f.digits[j - h],
944 | g = biSubtract(g, k);
945 | for (l = j; l > h; --l) {
946 | for (m = l >= g.digits.length ? 0 : g.digits[l], n = l - 1 >= g.digits.length ? 0 : g.digits[l - 1], o = l - 2 >= g.digits.length ? 0 : g.digits[l - 2], p = h >= b.digits.length ? 0 : b.digits[h], q = h - 1 >= b.digits.length ? 0 : b.digits[h - 1], f.digits[l - h - 1] = m == p ? maxDigitVal: Math.floor((m * biRadix + n) / p), r = f.digits[l - h - 1] * (p * biRadix + q), s = m * biRadixSquared + (n * biRadix + o); r > s;)--f.digits[l - h - 1],
947 | r = f.digits[l - h - 1] * (p * biRadix | q),
948 | s = m * biRadix * biRadix + (n * biRadix + o);
949 | k = biMultiplyByRadixPower(b, l - h - 1),
950 | g = biSubtract(g, biMultiplyDigit(k, f.digits[l - h - 1])),
951 | g.isNeg && (g = biAdd(g, k), --f.digits[l - h - 1])
952 | }
953 | return g = biShiftRight(g, i),
954 | f.isNeg = a.isNeg != e,
955 | a.isNeg && (f = e ? biAdd(f, bigOne) : biSubtract(f, bigOne), b = biShiftRight(b, i), g = biSubtract(b, g)),
956 | 0 == g.digits[0] && 0 == biHighIndex(g) && (g.isNeg = !1),
957 | new Array(f, g)
958 | }
959 | function biDivide(a, b) {
960 | return biDivideModulo(a, b)[0]
961 | }
962 | function biModulo(a, b) {
963 | return biDivideModulo(a, b)[1]
964 | }
965 | function biMultiplyMod(a, b, c) {
966 | return biModulo(biMultiply(a, b), c)
967 | }
968 | function biPow(a, b) {
969 | for (var c = bigOne,
970 | d = a;;) {
971 | if (0 != (1 & b) && (c = biMultiply(c, d)), b >>= 1, 0 == b) break;
972 | d = biMultiply(d, d)
973 | }
974 | return c
975 | }
976 | function biPowMod(a, b, c) {
977 | for (var d = bigOne,
978 | e = a,
979 | f = b;;) {
980 | if (0 != (1 & f.digits[0]) && (d = biMultiplyMod(d, e, c)), f = biShiftRight(f, 1), 0 == f.digits[0] && 0 == biHighIndex(f)) break;
981 | e = biMultiplyMod(e, e, c)
982 | }
983 | return d
984 | }
985 | function BarrettMu(a) {
986 | this.modulus = biCopy(a),
987 | this.k = biHighIndex(this.modulus) + 1;
988 | var b = new BigInt;
989 | b.digits[2 * this.k] = 1,
990 | this.mu = biDivide(b, this.modulus),
991 | this.bkplus1 = new BigInt,
992 | this.bkplus1.digits[this.k + 1] = 1,
993 | this.modulo = BarrettMu_modulo,
994 | this.multiplyMod = BarrettMu_multiplyMod,
995 | this.powMod = BarrettMu_powMod
996 | }
997 | function BarrettMu_modulo(a) {
998 | var i, b = biDivideByRadixPower(a, this.k - 1),
999 | c = biMultiply(b, this.mu),
1000 | d = biDivideByRadixPower(c, this.k + 1),
1001 | e = biModuloByRadixPower(a, this.k + 1),
1002 | f = biMultiply(d, this.modulus),
1003 | g = biModuloByRadixPower(f, this.k + 1),
1004 | h = biSubtract(e, g);
1005 | for (h.isNeg && (h = biAdd(h, this.bkplus1)), i = biCompare(h, this.modulus) >= 0; i;) h = biSubtract(h, this.modulus),
1006 | i = biCompare(h, this.modulus) >= 0;
1007 | return h
1008 | }
1009 | function BarrettMu_multiplyMod(a, b) {
1010 | var c = biMultiply(a, b);
1011 | return this.modulo(c)
1012 | }
1013 | function BarrettMu_powMod(a, b) {
1014 | var d, e, c = new BigInt;
1015 | for (c.digits[0] = 1, d = a, e = b;;) {
1016 | if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)), e = biShiftRight(e, 1), 0 == e.digits[0] && 0 == biHighIndex(e)) break;
1017 | d = this.multiplyMod(d, d)
1018 | }
1019 | return c
1020 | }
1021 |
1022 | var maxDigits, ZERO_ARRAY, bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks, biRadixBase = 2,
1023 | biRadixBits = 16,
1024 | bitsPerDigit = biRadixBits,
1025 | biRadix = 65536,
1026 | biHalfRadix = biRadix >>> 1,
1027 | biRadixSquared = biRadix * biRadix,
1028 | maxDigitVal = biRadix - 1,
1029 | maxInteger = 9999999999999998;
1030 | setMaxDigits(20),
1031 | dpl10 = 15,
1032 | lr10 = biFromNumber(1e15),
1033 | 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"),
1034 | hexToChar = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"),
1035 | highBitMasks = new Array(0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535),
1036 | lowBitMasks = new Array(0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535);
1037 |
1038 | function a(a) {
1039 | var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",
1040 | c = "";
1041 | for (d = 0; a > d; d += 1) e = Math.random() * b.length,
1042 | e = Math.floor(e),
1043 | c += b.charAt(e);
1044 | return c
1045 | }
1046 | function b(a, b) {
1047 | var c = CryptoJS.enc.Utf8.parse(b),
1048 | d = CryptoJS.enc.Utf8.parse("0102030405060708"),
1049 | e = CryptoJS.enc.Utf8.parse(a),
1050 | f = CryptoJS.AES.encrypt(e, c, {
1051 | iv: d,
1052 | mode: CryptoJS.mode.CBC
1053 | });
1054 | return f.toString()
1055 | }
1056 | function c(a, b, c) {
1057 | var d, e;
1058 | return setMaxDigits(131),
1059 | d = new RSAKeyPair(b, "", c),
1060 | e = encryptedString(d, a)
1061 | }
1062 | function d(d, e, f, g) {
1063 | var h = {},
1064 | i = a(16);
1065 | return h.encText = b(d, g),
1066 | h.encText = b(h.encText, i),
1067 | h.encSecKey = c(i, e, f),
1068 | h
1069 | }
1070 | function e(a, b, d, e) {
1071 | var f = {};
1072 | return f.encText = c(a + e, b, d),
1073 | f
1074 | }
1075 |
1076 | function getdata(d, e, f, g) {
1077 | var i = a(16);
1078 | var data = {};
1079 | data.params=b(b(d, g), i);
1080 | data.encSecKey=c(i, e, f);
1081 | return data
1082 | }
--------------------------------------------------------------------------------
/网易云评论请求加密2018-12-12/wangyicomment.py:
--------------------------------------------------------------------------------
1 | # -*- coding:utf-8 -*-
2 | import execjs
3 |
4 | with open("./js.txt", 'r', encoding='utf-8') as f: # 打开JS文件
5 | line = f.readline()
6 | htmlstr = ''
7 | while line:
8 | htmlstr = htmlstr + line
9 | line = f.readline()
10 | jsstr = htmlstr
11 | ctx = execjs.compile(jsstr) # 加载JS文件
12 | a = '"{"rid":"R_SO_4_371362","offset":"160","total":"false","limit":"20",' \
13 | '"csrf_token":"de097d5986487c4aefe9f52c65e43224"}"}'
14 | b = "010001"
15 | c = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17" \
16 | "a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114" \
17 | "af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef5" \
18 | "2741d546b8e289dc6935b3ece0462db0a22b8e7"
19 | d = "0CoJUm6Qyw8W8jud"
20 | sp = ctx.call(
21 | "getdata", a, b, c, d)
22 |
23 |
24 |
--------------------------------------------------------------------------------
/腾讯企鹅媒体登陆2018-12-8/js.txt:
--------------------------------------------------------------------------------
1 | var MD5 = function(a) {
2 | function b(a, b) {
3 | return a << b | a >>> 32 - b
4 | }
5 | function c(a, b) {
6 | var c, d, e, f, g;
7 | return e = 2147483648 & a,
8 | f = 2147483648 & b,
9 | c = 1073741824 & a,
10 | d = 1073741824 & b,
11 | g = (1073741823 & a) + (1073741823 & b),
12 | c & d ? 2147483648 ^ g ^ e ^ f: c | d ? 1073741824 & g ? 3221225472 ^ g ^ e ^ f: 1073741824 ^ g ^ e ^ f: g ^ e ^ f
13 | }
14 | function d(a, b, c) {
15 | return a & b | ~a & c
16 | }
17 | function e(a, b, c) {
18 | return a & c | b & ~c
19 | }
20 | function f(a, b, c) {
21 | return a ^ b ^ c
22 | }
23 | function g(a, b, c) {
24 | return b ^ (a | ~c)
25 | }
26 | function h(a, e, f, g, h, i, j) {
27 | return a = c(a, c(c(d(e, f, g), h), j)),
28 | c(b(a, i), e)
29 | }
30 | function i(a, d, f, g, h, i, j) {
31 | return a = c(a, c(c(e(d, f, g), h), j)),
32 | c(b(a, i), d)
33 | }
34 | function j(a, d, e, g, h, i, j) {
35 | return a = c(a, c(c(f(d, e, g), h), j)),
36 | c(b(a, i), d)
37 | }
38 | function k(a, d, e, f, h, i, j) {
39 | return a = c(a, c(c(g(d, e, f), h), j)),
40 | c(b(a, i), d)
41 | }
42 | function l(a) {
43 | for (var b, c = a.length,
44 | d = c + 8,
45 | e = (d - d % 64) / 64, f = 16 * (e + 1), g = Array(f - 1), h = 0, i = 0; c > i;) b = (i - i % 4) / 4,
46 | h = i % 4 * 8,
47 | g[b] = g[b] | a.charCodeAt(i) << h,
48 | i++;
49 | return b = (i - i % 4) / 4,
50 | h = i % 4 * 8,
51 | g[b] = g[b] | 128 << h,
52 | g[f - 2] = c << 3,
53 | g[f - 1] = c >>> 29,
54 | g
55 | }
56 | function m(a) {
57 | var b, c, d = "",
58 | e = "";
59 | for (c = 0; 3 >= c; c++) b = a >>> 8 * c & 255,
60 | e = "0" + b.toString(16),
61 | d += e.substr(e.length - 2, 2);
62 | return d
63 | }
64 | function n(a) {
65 | a = a.replace(/\r\n/g, "\n");
66 | for (var b = "",
67 | c = 0; c < a.length; c++) {
68 | var d = a.charCodeAt(c);
69 | 128 > d ? b += String.fromCharCode(d) : d > 127 && 2048 > d ? (b += String.fromCharCode(d >> 6 | 192), b += String.fromCharCode(63 & d | 128)) : (b += String.fromCharCode(d >> 12 | 224), b += String.fromCharCode(d >> 6 & 63 | 128), b += String.fromCharCode(63 & d | 128))
70 | }
71 | return b
72 | }
73 | var o, p, q, r, s, t, u, v, w, x = Array(),
74 | y = 7,
75 | z = 12,
76 | A = 17,
77 | B = 22,
78 | C = 5,
79 | D = 9,
80 | E = 14,
81 | F = 20,
82 | G = 4,
83 | H = 11,
84 | I = 16,
85 | J = 23,
86 | K = 6,
87 | L = 10,
88 | M = 15,
89 | N = 21;
90 | for (a = n(a), x = l(a), t = 1732584193, u = 4023233417, v = 2562383102, w = 271733878, o = 0; o < x.length; o += 16) p = t,
91 | q = u,
92 | r = v,
93 | s = w,
94 | t = h(t, u, v, w, x[o + 0], y, 3614090360),
95 | w = h(w, t, u, v, x[o + 1], z, 3905402710),
96 | v = h(v, w, t, u, x[o + 2], A, 606105819),
97 | u = h(u, v, w, t, x[o + 3], B, 3250441966),
98 | t = h(t, u, v, w, x[o + 4], y, 4118548399),
99 | w = h(w, t, u, v, x[o + 5], z, 1200080426),
100 | v = h(v, w, t, u, x[o + 6], A, 2821735955),
101 | u = h(u, v, w, t, x[o + 7], B, 4249261313),
102 | t = h(t, u, v, w, x[o + 8], y, 1770035416),
103 | w = h(w, t, u, v, x[o + 9], z, 2336552879),
104 | v = h(v, w, t, u, x[o + 10], A, 4294925233),
105 | u = h(u, v, w, t, x[o + 11], B, 2304563134),
106 | t = h(t, u, v, w, x[o + 12], y, 1804603682),
107 | w = h(w, t, u, v, x[o + 13], z, 4254626195),
108 | v = h(v, w, t, u, x[o + 14], A, 2792965006),
109 | u = h(u, v, w, t, x[o + 15], B, 1236535329),
110 | t = i(t, u, v, w, x[o + 1], C, 4129170786),
111 | w = i(w, t, u, v, x[o + 6], D, 3225465664),
112 | v = i(v, w, t, u, x[o + 11], E, 643717713),
113 | u = i(u, v, w, t, x[o + 0], F, 3921069994),
114 | t = i(t, u, v, w, x[o + 5], C, 3593408605),
115 | w = i(w, t, u, v, x[o + 10], D, 38016083),
116 | v = i(v, w, t, u, x[o + 15], E, 3634488961),
117 | u = i(u, v, w, t, x[o + 4], F, 3889429448),
118 | t = i(t, u, v, w, x[o + 9], C, 568446438),
119 | w = i(w, t, u, v, x[o + 14], D, 3275163606),
120 | v = i(v, w, t, u, x[o + 3], E, 4107603335),
121 | u = i(u, v, w, t, x[o + 8], F, 1163531501),
122 | t = i(t, u, v, w, x[o + 13], C, 2850285829),
123 | w = i(w, t, u, v, x[o + 2], D, 4243563512),
124 | v = i(v, w, t, u, x[o + 7], E, 1735328473),
125 | u = i(u, v, w, t, x[o + 12], F, 2368359562),
126 | t = j(t, u, v, w, x[o + 5], G, 4294588738),
127 | w = j(w, t, u, v, x[o + 8], H, 2272392833),
128 | v = j(v, w, t, u, x[o + 11], I, 1839030562),
129 | u = j(u, v, w, t, x[o + 14], J, 4259657740),
130 | t = j(t, u, v, w, x[o + 1], G, 2763975236),
131 | w = j(w, t, u, v, x[o + 4], H, 1272893353),
132 | v = j(v, w, t, u, x[o + 7], I, 4139469664),
133 | u = j(u, v, w, t, x[o + 10], J, 3200236656),
134 | t = j(t, u, v, w, x[o + 13], G, 681279174),
135 | w = j(w, t, u, v, x[o + 0], H, 3936430074),
136 | v = j(v, w, t, u, x[o + 3], I, 3572445317),
137 | u = j(u, v, w, t, x[o + 6], J, 76029189),
138 | t = j(t, u, v, w, x[o + 9], G, 3654602809),
139 | w = j(w, t, u, v, x[o + 12], H, 3873151461),
140 | v = j(v, w, t, u, x[o + 15], I, 530742520),
141 | u = j(u, v, w, t, x[o + 2], J, 3299628645),
142 | t = k(t, u, v, w, x[o + 0], K, 4096336452),
143 | w = k(w, t, u, v, x[o + 7], L, 1126891415),
144 | v = k(v, w, t, u, x[o + 14], M, 2878612391),
145 | u = k(u, v, w, t, x[o + 5], N, 4237533241),
146 | t = k(t, u, v, w, x[o + 12], K, 1700485571),
147 | w = k(w, t, u, v, x[o + 3], L, 2399980690),
148 | v = k(v, w, t, u, x[o + 10], M, 4293915773),
149 | u = k(u, v, w, t, x[o + 1], N, 2240044497),
150 | t = k(t, u, v, w, x[o + 8], K, 1873313359),
151 | w = k(w, t, u, v, x[o + 15], L, 4264355552),
152 | v = k(v, w, t, u, x[o + 6], M, 2734768916),
153 | u = k(u, v, w, t, x[o + 13], N, 1309151649),
154 | t = k(t, u, v, w, x[o + 4], K, 4149444226),
155 | w = k(w, t, u, v, x[o + 11], L, 3174756917),
156 | v = k(v, w, t, u, x[o + 2], M, 718787259),
157 | u = k(u, v, w, t, x[o + 9], N, 3951481745),
158 | t = c(t, p),
159 | u = c(u, q),
160 | v = c(v, r),
161 | w = c(w, s);
162 | var O = m(t) + m(u) + m(v) + m(w);
163 | return O.toLowerCase()
164 | };
165 |
166 | function getpwd(pwd, token, salt) {
167 | var p;
168 | p = MD5(token + MD5(salt + pwd));
169 | return p
170 | }
--------------------------------------------------------------------------------
/腾讯企鹅媒体登陆2018-12-8/login-om.qq.com.py:
--------------------------------------------------------------------------------
1 |
2 | import requests
3 | from json import loads
4 | import execjs
5 | from urllib import parse
6 |
7 |
8 | def get_token(email):
9 | email = parse.quote(email)
10 | token_url = 'https://om.qq.com/userAuth/randomCode?email={}&relogin=1'.format(email)
11 | headers = {
12 | "accept": "application/json, text/javascript, */*; q=0.01",
13 | "accept-encoding": "gzip, deflate, br",
14 | "accept-language": "zh-CN,zh;q=0.9",
15 | "cookie": "RK=9XA4Hchh7C; ptcz=af27247c2cc54de7b15f949e041525c62102f66aae856e17adac1a7a41f93e21;"
16 | " cuid=2366632689; pgv_pvid=8300690180; pgv_pvi=5655952384; o_cookie=2551513277; "
17 | "tvfe_boss_uuid=3af2d5ef04df785f; ts_uid=1842616160; pt2gguin=o2551513277; "
18 | "ts_refer=www.baidu.com/link; fname=%E5%96%9C%E4%B9%90%E8%A7%81%E9%97%BB; "
19 | "fimgurl=http%3A%2F%2Finews.gtimg.com%2Fnewsapp_ls%2F0%2F655036856_200200%2F0; "
20 | "uin=o2551513277; ptisp=cm; pgv_si=s3134537728; TSID=ofu1fo74v126dtfhgtellnpb23; "
21 | "pgv_info=ssid=s8282530815; skey=@j0RBeBv05; ts_last=om.qq.com/userAuth/index",
22 | "referer": "https://om.qq.com/userAuth/index",
23 | "user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 "
24 | "(KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2767.400",
25 | "x-requested-with": "XMLHttpRequest"
26 | }
27 |
28 | tocker_data = requests.get(token_url, headers=headers)
29 | if tocker_data.status_code == 200:
30 | token = loads(tocker_data.text)
31 | return (token['data'], tocker_data.cookies['randomkey'])
32 | else:
33 | return False
34 |
35 |
36 | def login(email, pwd):
37 | log = requests.Session()
38 | login_url = 'https://om.qq.com/userAuth/SignIn?relogin=1'
39 | token, randomkey = get_token(email)
40 | headers = {
41 | "accept": "application/json, text/javascript, */*; q=0.01",
42 | "accept-encoding": "gzip, deflate, br",
43 | "accept-language": "zh-CN,zh;q=0.9",
44 | "content-length": "109",
45 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8",
46 | "cookie": "RK=9XA4Hchh7C; ptcz=af27247c2cc54de7b15f949e041525c62102f66aae856e17adac1a7a41f93e21; "
47 | "cuid=2366632689; pgv_pvid=8300690180; pgv_pvi=5655952384; o_cookie=2551513277; "
48 | "tvfe_boss_uuid=3af2d5ef04df785f; ts_uid=1842616160; pt2gguin=o2551513277; "
49 | "ts_refer=www.baidu.com/link; fname=%E5%96%9C%E4%B9%90%E8%A7%81%E9%97%BB; "
50 | "fimgurl=http%3A%2F%2Finews.gtimg.com%2Fnewsapp_ls%2F0%2F655036856_200200%2F0; "
51 | "uin=o2551513277; ptisp=cm; pgv_si=s3134537728; TSID=ofu1fo74v126dtfhgtellnpb23; "
52 | "pgv_info=ssid=s8282530815; skey=@j0RBeBv05; ts_last=om.qq.com/userAuth/index; "
53 | "randomkey={}".format(randomkey),
54 | "origin": "https://om.qq.com",
55 | "referer": "https://om.qq.com/userAuth/index",
56 | "user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, "
57 | "like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2767.400",
58 | "x-requested-with": "XMLHttpRequest"
59 | }
60 |
61 | with open("./js.txt", 'r', encoding='utf-8') as f: # 打开JS文件
62 | line = f.readline()
63 | htmlstr = ''
64 | while line:
65 | htmlstr = htmlstr + line
66 | line = f.readline()
67 | jsstr = htmlstr
68 | ctx = execjs.compile(jsstr) # 加载JS文件
69 | pwd = ctx.call("getpwd", pwd, token['token'], token['salt'])
70 | loginresponse = log.post(login_url, data={'email': email, 'pwd': pwd, 'token': token['token']}, headers=headers)
71 | data = loads(loginresponse.text)
72 |
73 | '''test'''
74 |
75 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/英领/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/英领/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/英领/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 | 1547389324493
139 |
140 |
141 | 1547389324493
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 | file://$PROJECT_DIR$/linkedin.py
175 | 15
176 |
177 |
178 | file://$PROJECT_DIR$/linkedin.py
179 | 7
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
--------------------------------------------------------------------------------
/英领/.idea/英领.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/英领/linkedin.py:
--------------------------------------------------------------------------------
1 | # --*- coding:utf-8 -*-
2 |
3 | import requests
4 | from lxml import etree
5 |
6 | session = requests.Session()
7 |
8 |
9 | def login(name, password):
10 | session.headers = {"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
11 | "accept-encoding": "gzip, deflate, br",
12 | "accept-language": "zh-CN,zh;q=0.9,en;q=0.8",
13 | "upgrade-insecure-requests": "1",
14 | "user-agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 "
15 | "(KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
16 | }
17 | url = 'https://www.linkedin.com/'
18 | login_url = 'https://www.linkedin.com/uas/login-submit?' \
19 | 'loginSubmitSource=GUEST_HOME'
20 | page = session.get(url)
21 | rp = etree.HTML(page.text)
22 | loginCsrfParam = rp.xpath('//*[@name="loginCsrfParam"]/@value')[0]
23 |
24 | form_data = {
25 | 'session_key': name,
26 | 'session_password': password,
27 | 'loginCsrfParam': loginCsrfParam,
28 | 'isJsEnabled': 'false'
29 | }
30 | page_login = session.post(login_url, data=form_data
31 | )
32 |
33 | login_rp = etree.HTML(page_login.text)
34 | verify_url = 'https://www.linkedin.com/checkpoint/challenge/verify'
35 | csrfToken = login_rp.xpath('//*[@name="csrfToken"]/@value')[0]
36 | pageInstance = login_rp.xpath('//*[@name="pageInstance"]/@value')[0]
37 | resendUrl = login_rp.xpath('//*[@name="resendUrl"]/@value')[0]
38 | challengeId = login_rp.xpath('//*[@name="challengeId"]/@value')[0]
39 | language = 'zh-CN'
40 | displayTime = login_rp.xpath('//*[@name="displayTime"]/@value')[0]
41 | challengeSource = login_rp.xpath('//*[@name="challengeSource"]/@value')[0]
42 | requestSubmissionId = login_rp.xpath('//*[@name="requestSubmissionId"]/@value')[0]
43 | challengeType = login_rp.xpath('//*[@name="challengeType"]/@value')[0]
44 | challengeData = login_rp.xpath('//*[@name="challengeData"]/@value')[0]
45 | failureRedirectUri = login_rp.xpath('//*[@name="failureRedirectUri"]/@value')[0]
46 | pin = input('请输入验证码')
47 | verify_data = {
48 | 'csrfToken': csrfToken,
49 | 'pageInstance': pageInstance,
50 | 'resendUrl': resendUrl,
51 | 'challengeId': challengeId,
52 | 'language': language,
53 | 'displayTime': displayTime,
54 | 'challengeSource': challengeSource,
55 | 'requestSubmissionId': requestSubmissionId,
56 | 'challengeType': challengeType,
57 | 'challengeData': challengeData,
58 | 'failureRedirectUri': failureRedirectUri,
59 | 'pin': pin,
60 | }
61 | verify_post = session.post(verify_url, data=verify_data)
62 |
63 |
64 | if __name__ == '__main__':
65 | login('2551513277@qq.com', 'sdsdsdsd')
--------------------------------------------------------------------------------