Last active
January 10, 2016 15:31
-
-
Save wangqr/944d59d7878699408acc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name 选课登录助手 | |
// @namespace org.wangqr.xkhelper | |
// @description 选课登录界面的功能补充,增加记住用户名功能 *仅在Firefox测试通过* | |
// @grant none | |
// @run-at document-end | |
// @include https://zhjwxk.cic.tsinghua.edu.cn/* | |
// @include https://zhjwxkyw.cic.tsinghua.edu.cn/* | |
// @include http://zhjwxk.cic.tsinghua.edu.cn/* | |
// @include http://zhjwxkyw.cic.tsinghua.edu.cn/* | |
// ==/UserScript== | |
function md5cycle(x, k) { | |
var a = x[0], | |
b = x[1], | |
c = x[2], | |
d = x[3]; | |
a = ff(a, b, c, d, k[0], 7, - 680876936); | |
d = ff(d, a, b, c, k[1], 12, - 389564586); | |
c = ff(c, d, a, b, k[2], 17, 606105819); | |
b = ff(b, c, d, a, k[3], 22, - 1044525330); | |
a = ff(a, b, c, d, k[4], 7, - 176418897); | |
d = ff(d, a, b, c, k[5], 12, 1200080426); | |
c = ff(c, d, a, b, k[6], 17, - 1473231341); | |
b = ff(b, c, d, a, k[7], 22, - 45705983); | |
a = ff(a, b, c, d, k[8], 7, 1770035416); | |
d = ff(d, a, b, c, k[9], 12, - 1958414417); | |
c = ff(c, d, a, b, k[10], 17, - 42063); | |
b = ff(b, c, d, a, k[11], 22, - 1990404162); | |
a = ff(a, b, c, d, k[12], 7, 1804603682); | |
d = ff(d, a, b, c, k[13], 12, - 40341101); | |
c = ff(c, d, a, b, k[14], 17, - 1502002290); | |
b = ff(b, c, d, a, k[15], 22, 1236535329); | |
a = gg(a, b, c, d, k[1], 5, - 165796510); | |
d = gg(d, a, b, c, k[6], 9, - 1069501632); | |
c = gg(c, d, a, b, k[11], 14, 643717713); | |
b = gg(b, c, d, a, k[0], 20, - 373897302); | |
a = gg(a, b, c, d, k[5], 5, - 701558691); | |
d = gg(d, a, b, c, k[10], 9, 38016083); | |
c = gg(c, d, a, b, k[15], 14, - 660478335); | |
b = gg(b, c, d, a, k[4], 20, - 405537848); | |
a = gg(a, b, c, d, k[9], 5, 568446438); | |
d = gg(d, a, b, c, k[14], 9, - 1019803690); | |
c = gg(c, d, a, b, k[3], 14, - 187363961); | |
b = gg(b, c, d, a, k[8], 20, 1163531501); | |
a = gg(a, b, c, d, k[13], 5, - 1444681467); | |
d = gg(d, a, b, c, k[2], 9, - 51403784); | |
c = gg(c, d, a, b, k[7], 14, 1735328473); | |
b = gg(b, c, d, a, k[12], 20, - 1926607734); | |
a = hh(a, b, c, d, k[5], 4, - 378558); | |
d = hh(d, a, b, c, k[8], 11, - 2022574463); | |
c = hh(c, d, a, b, k[11], 16, 1839030562); | |
b = hh(b, c, d, a, k[14], 23, - 35309556); | |
a = hh(a, b, c, d, k[1], 4, - 1530992060); | |
d = hh(d, a, b, c, k[4], 11, 1272893353); | |
c = hh(c, d, a, b, k[7], 16, - 155497632); | |
b = hh(b, c, d, a, k[10], 23, - 1094730640); | |
a = hh(a, b, c, d, k[13], 4, 681279174); | |
d = hh(d, a, b, c, k[0], 11, - 358537222); | |
c = hh(c, d, a, b, k[3], 16, - 722521979); | |
b = hh(b, c, d, a, k[6], 23, 76029189); | |
a = hh(a, b, c, d, k[9], 4, - 640364487); | |
d = hh(d, a, b, c, k[12], 11, - 421815835); | |
c = hh(c, d, a, b, k[15], 16, 530742520); | |
b = hh(b, c, d, a, k[2], 23, - 995338651); | |
a = ii(a, b, c, d, k[0], 6, - 198630844); | |
d = ii(d, a, b, c, k[7], 10, 1126891415); | |
c = ii(c, d, a, b, k[14], 15, - 1416354905); | |
b = ii(b, c, d, a, k[5], 21, - 57434055); | |
a = ii(a, b, c, d, k[12], 6, 1700485571); | |
d = ii(d, a, b, c, k[3], 10, - 1894986606); | |
c = ii(c, d, a, b, k[10], 15, - 1051523); | |
b = ii(b, c, d, a, k[1], 21, - 2054922799); | |
a = ii(a, b, c, d, k[8], 6, 1873313359); | |
d = ii(d, a, b, c, k[15], 10, - 30611744); | |
c = ii(c, d, a, b, k[6], 15, - 1560198380); | |
b = ii(b, c, d, a, k[13], 21, 1309151649); | |
a = ii(a, b, c, d, k[4], 6, - 145523070); | |
d = ii(d, a, b, c, k[11], 10, - 1120210379); | |
c = ii(c, d, a, b, k[2], 15, 718787259); | |
b = ii(b, c, d, a, k[9], 21, - 343485551); | |
x[0] = add32(a, x[0]); | |
x[1] = add32(b, x[1]); | |
x[2] = add32(c, x[2]); | |
x[3] = add32(d, x[3]); | |
} | |
function cmn(q, a, b, x, s, t) { | |
a = add32(add32(a, q), add32(x, t)); | |
return add32((a << s) | (a >>> (32 - s)), b); | |
} | |
function ff(a, b, c, d, x, s, t) { | |
return cmn((b & c) | ((~b) & d), a, b, x, s, t); | |
} | |
function gg(a, b, c, d, x, s, t) { | |
return cmn((b & d) | (c & (~d)), a, b, x, s, t); | |
} | |
function hh(a, b, c, d, x, s, t) { | |
return cmn(b ^ c ^ d, a, b, x, s, t); | |
} | |
function ii(a, b, c, d, x, s, t) { | |
return cmn(c ^ (b | (~d)), a, b, x, s, t); | |
} | |
function md51(s) { | |
txt = ''; | |
var n = s.length, | |
state = [ | |
1732584193, | |
- 271733879, | |
- 1732584194, | |
271733878 | |
], | |
i; | |
for (i = 64; i <= s.length; i += 64) { | |
md5cycle(state, md5blk(s.substring(i - 64, i))); | |
} | |
s = s.substring(i - 64); | |
var tail = [ | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0, | |
0 | |
]; | |
for (i = 0; i < s.length; i++) | |
tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3); | |
tail[i >> 2] |= 128 << ((i % 4) << 3); | |
if (i > 55) { | |
md5cycle(state, tail); | |
for (i = 0; i < 16; i++) tail[i] = 0; | |
} | |
tail[14] = n * 8; | |
md5cycle(state, tail); | |
return state; | |
} | |
function md5blk(s) { | |
var md5blks = [ | |
], | |
i; | |
for (i = 0; i < 64; i += 4) { | |
md5blks[i >> 2] = s.charCodeAt(i) | |
+ (s.charCodeAt(i + 1) << 8) | |
+ (s.charCodeAt(i + 2) << 16) | |
+ (s.charCodeAt(i + 3) << 24); | |
} | |
return md5blks; | |
} | |
var hex_chr = '0123456789abcdef'.split(''); | |
function rhex(n) | |
{ | |
var s = '', | |
j = 0; | |
for (; j < 4; j++) | |
s += hex_chr[(n >> (j * 8 + 4)) & 15] | |
+ hex_chr[(n >> (j * 8)) & 15]; | |
return s; | |
} | |
function hex(x) { | |
for (var i = 0; i < x.length; i++) | |
x[i] = rhex(x[i]); | |
return x.join(''); | |
} | |
function md5(s) { | |
return hex(md51(s)); | |
} | |
function add32(a, b) { | |
return (a + b) & 4294967295; | |
} | |
function getHash() { | |
var img = document.getElementById('captcha'); | |
var canvas = document.createElement('canvas'); | |
canvas.width = img.naturalWidth; | |
canvas.height = img.naturalHeight; | |
var ctx = canvas.getContext('2d'); | |
ctx.drawImage(img, 0, 0); | |
var dataURL = canvas.toDataURL('image/png'); | |
return md5(dataURL); | |
} | |
function retrCaptcha() { | |
var retObj = localStorage.getItem('captchaObject'); | |
document.getElementById('j_username').value = localStorage.getItem('username') || ''; | |
captchaBox = document.getElementsByName('_login_image_') [0]; | |
if (retObj) { | |
retObj = JSON.parse(retObj); | |
if (getHash() in retObj) { | |
captchaBox.value = retObj[getHash()]; | |
} | |
else { | |
captchaBox.value = ''; | |
} | |
} | |
}; | |
function storeCaptcha() { | |
var obj = localStorage.getItem('captchaObject'); | |
if (obj === null) { | |
obj = { | |
}; | |
} else { | |
obj = JSON.parse(obj); | |
} | |
obj[getHash()] = captchaBox.value; | |
localStorage.setItem('captchaObject', JSON.stringify(obj)); | |
localStorage.setItem('username', document.getElementById('j_username').value); | |
}; | |
if (/^https?:\/\/zhjwxk(yw)?\.cic\.tsinghua\.edu\.cn\/xklogin\.do/.test(document.location)) { | |
var img = document.getElementById('captcha'); | |
img.addEventListener('load', retrCaptcha, false); | |
var a = document.getElementsByTagName('a') | |
var loginButton = [ | |
]; | |
for (var i = 0; i < a.length; ++i) { | |
if (a[i].getAttribute('onclick') === 'doLogin();') { | |
loginButton = a[i]; | |
} | |
} | |
loginButton.addEventListener('click', storeCaptcha, false); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment