由于我们学校的校园网认证是弹出页面的那种,每次输密码都会很蛋疼,于是大一的时候我写过一个宏,每次打开认证界面按一下设定好的键就可以自动填上账号密码了,用了将近三年,效果一直不错。

但最近我发现了一个新的问题,我懒得连浏览器都不想自己打开了。

于是我用selenium又写了一个小工具。Selenium也是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。

# -*- coding:utf-8 -*-from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import Bydef submit():browser = webdriver.Firefox()browser.get("http://61.137.86.87:8080/portalNat444/index.jsp")browser.maximize_window()try:submit_account = WebDriverWait(browser,timeout=10).until(EC.presence_of_element_located((By.ID,'account')),message=u'元素加载超时!')submit_account.send_keys("--YOUR_ACCOUNT--")submit_password = WebDriverWait(browser,timeout=10).until(EC.presence_of_element_located((By.ID,'userPassword')),message=u'元素加载超时!')submit_password.send_keys("--YOUR_PASSWORD--")browser.find_element_by_id("login_button").click()browser.quit()print ("登录成功!")except NoSuchElementException as e:print ("登录失败:")print (e.message)if __name__ == "__main__":submit()

其实这段代码已经可以很好地满足我的需要了。

不过因为这两天在学习PyQt4,所以一顺手就写了一个界面,方便使用。

#coding:utf-8import sys
import os
from PyQt4 import QtGui ,Qt ,QtCore
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import Byclass Window( QtGui.QWidget ):def __init__( self ):super( Window, self ).__init__()self.setWindowTitle( "Auto Submit tool" )self.setFixedSize(150, 50)gridlayout = QtGui.QGridLayout()button1 = QtGui.QPushButton( "Come on!" )self.connect( button1, QtCore.SIGNAL( 'clicked()' ), self.submit )gridlayout.addWidget( button1, 0, 0)self.setLayout( gridlayout )def OnButton1(self):submit()def submit(self):browser = webdriver.Firefox()browser.get("http://61.137.86.87:8080/portalNat444/index.jsp")browser.maximize_window()try:submit_account = WebDriverWait(browser,timeout=10).until(EC.presence_of_element_located((By.ID,'account')),message=u'元素加载超时!')submit_account.send_keys("--YOUR_ACCOUNT--")submit_password = WebDriverWait(browser,timeout=10).until(EC.presence_of_element_located((By.ID,'userPassword')),message=u'元素加载超时!')submit_password.send_keys("--YOUR_PASSWORD--")browser.find_element_by_id("login_button").click()browser.quit()message = "Successful"QtGui.QMessageBox.about( self, 'State', message )print ("登录成功!")except NoSuchElementException as e:message = "Login Failed:" + e.messageprint ("登录失败:")print (e.message)app = QtGui.QApplication( sys.argv )
win = Window()
win.show()
app.exec_()

之后我们惯例应该生成exe的,不过这个东西貌似受众并不广泛,需要的就自己去生成一下喽,记得加上selenium库~

python setup.py py2exe -p selenium

另外,我在找DOM的id的时候发现了一些羞羞的东西(啊啊啊,我真的只是去看一下id的啊!)

1.index.js:

var publickey = RSAUtils.getKeyPair("10001","","a8a02b821d52d3d0ca90620c78474b78435423be99da83cc190ab5cb5b9b922a4c8ba6b251e78429757cf11cde119e1eacff46fa3bf3b43ef68ceb29897b7aa6b5b1359fef6f35f32b748dc109fd3d09f3443a2cc3b73e99579f3d0fe6a96ccf6a48bc40056a6cac327d309b93b1d61d6f6e8f4a42fc9540f34f1c4a2e053445");
var logFlag = false;
//设置登录函数
$(document).ready(function(){//公告$('#DialogNote').dialog({modal:true,title:'XX大学上网注意事项',iconCls:'icon-help',buttons:[{text:'确  认 ',handler:function(){$('#DialogNote').dialog('close');}}]});//获取公告内容$.get('gonggao/usingNote.txt',function(data){$('#Notes').html(data)});//禁用右键$('body').bind('contextmenu', function() {return false;});$("#login_button").click(function(){if(true == logFlag){alert("正在提交服务器,请稍后!");return;}if(("" == $("#account").val())||(""==$("#userPassword").val())){alert("账号或密码不能空");return;}
//          if(""==$('#validateCode').val())
//          {//              alert("校验码不能空");
//              return;
//          }if(($("#account").val().length>32)||($("#userPassword").val().length>32)){alert("账号或密码超长");return;}if((""==$("#userIntranetAddress").val())||("null"==$("#userIntranetAddress").val())){alert('无法获取您的网络地址,请输入任意其它网站从网关处导航至本认证页面');return;}if((""==$("#brasAddress").val())||("null"==$("#brasAddress").val())){alert('无法获取您接入点设备地址,请输入任意其它网站从网关处导航至本认证页面');return;}//设置避免重复提交logFlag = true ;$("#account").attr("readonly",true);$("#userPassword").attr("readonly",true);$.ajax({url:'AccessServices/login',data:{'accountID':$("#account").val()+'@zndx.inter','password':RSAUtils.encryptedString(publickey, encodeURIComponent($("#userPassword").val())),
//          'validateCode':$('#validateCode').val(),'brasAddress':$("#brasAddress").val(),'userIntranetAddress':$("#userIntranetAddress").val()},type:'post',dataType:'json',contentType:'application/x-www-form-urlencoded;charset=utf-8',cache:false,success:function(data){logFlag = false ;$("#account").attr("readonly",false);$("#userPassword").attr("readonly",false);switch (data.resultCode){case '0':window.location="main2.jsp";break;case '1':if(data.resultDescribe == null || data.resultDescribe ==""){alert('其他原因认证拒绝');}else{alert(data.resultDescribe);}break;case '2':alert('用户连接已经存在');break;case '3':alert('接入服器务繁忙,稍后重试');break;case '4':alert('未知错误');break;case '6':alert('认证响应超时');break;case '7':alert('捕获用户网络地址错误');break;case '8':alert('服务器网络连接异常');break;case '9':alert('认证服务脚本执行异常');break;case '10':alert('校验码错误');
//                  reloadValidateCode();break;case '11':alert('您的密码相对简单,帐号存在被盗风险,请及时修改成强度高的密码');window.location="main2.jsp";break;case '12':alert('无法获取您的网络地址,请输入任意其它网站从网关处导航至本认证页面');break;case '13':alert('无法获取您接入点设备地址,请输入任意其它网站从网关处导航至本认证页面');break;case '14':alert('无法获取您套餐信息');break;case '16':alert('请输入任意其它网站导航至本认证页面,并按正常PORTAL正常流程认证');break;case '17':alert('连接已失效,请输入任意其它网站从网关处导航至本认证页面');break;default:alert('未知错误');break;}},error:function(xhr){logFlag = false ;$("#account").attr("readonly",false);$("#userPassword").attr("readonly",false);alert('网络异常,服务脚本执行异常');}});});
});
//校验码
function reloadValidateCode(){var timeStr = "?time=" + (new Date()).getTime();var url = "./CodeServlet"+timeStr;document.getElementById("validateCodeImg").src = url;
}
//重置
function resetVal()
{$("#account").val('');$("#userPassword").val('');return false;
}
//国际化
function i18n(type)
{if('1'==type){$("span[id=userid_span]").html("帐 号:");$("span[id=password_span]").html("密 码:");$("span[id=validateCode_span]").html("验证码:");}else if('2'==type){$("span[id=userid_span]").html("Userid:");$("span[id=password_span]").html("Password:");$("span[id=validateCode_span]").html("ValidateCode:");}
}

2.security.js:

/** RSA, a suite of routines for performing RSA public-key computations in JavaScript.* Copyright 1998-2005 David Shapiro.* Dave Shapiro* dave@ohdave.com* changed by Fuchun, 2010-05-06* fcrpg2005@gmail.com*/(function($w) {if(typeof $w.RSAUtils === 'undefined')var RSAUtils = $w.RSAUtils = {};var biRadixBase = 2;
var biRadixBits = 16;
var bitsPerDigit = biRadixBits;
var biRadix = 1 << 16; // = 2^16 = 65536
var biHalfRadix = biRadix >>> 1;
var biRadixSquared = biRadix * biRadix;
var maxDigitVal = biRadix - 1;
var maxInteger = 9999999999999998;//maxDigits:
//Change this to accommodate your largest number size. Use setMaxDigits()
//to change it!
//
//In general, if you're working with numbers of size N bits, you'll need 2*N
//bits of storage. Each digit holds 16 bits. So, a 1024-bit key will need
//
//1024 * 2 / 16 = 128 digits of storage.
//
var maxDigits;
var ZERO_ARRAY;
var bigZero, bigOne;var BigInt = $w.BigInt = function(flag) {if (typeof flag == "boolean" && flag == true) {this.digits = null;} else {this.digits = ZERO_ARRAY.slice(0);}this.isNeg = false;
};RSAUtils.setMaxDigits = function(value) {maxDigits = value;ZERO_ARRAY = new Array(maxDigits);for (var iza = 0; iza < ZERO_ARRAY.length; iza++) ZERO_ARRAY[iza] = 0;bigZero = new BigInt();bigOne = new BigInt();bigOne.digits[0] = 1;
};
RSAUtils.setMaxDigits(20);//The maximum number of digits in base 10 you can convert to an
//integer without JavaScript throwing up on you.
var dpl10 = 15;RSAUtils.biFromNumber = function(i) {var result = new BigInt();result.isNeg = i < 0;i = Math.abs(i);var j = 0;while (i > 0) {result.digits[j++] = i & maxDigitVal;i = Math.floor(i / biRadix);}return result;
};//lr10 = 10 ^ dpl10
var lr10 = RSAUtils.biFromNumber(1000000000000000);RSAUtils.biFromDecimal = function(s) {var isNeg = s.charAt(0) == '-';var i = isNeg ? 1 : 0;var result;// Skip leading zeros.while (i < s.length && s.charAt(i) == '0') ++i;if (i == s.length) {result = new BigInt();}else {var digitCount = s.length - i;var fgl = digitCount % dpl10;if (fgl == 0) fgl = dpl10;result = RSAUtils.biFromNumber(Number(s.substr(i, fgl)));i += fgl;while (i < s.length) {result = RSAUtils.biAdd(RSAUtils.biMultiply(result, lr10),RSAUtils.biFromNumber(Number(s.substr(i, dpl10))));i += dpl10;}result.isNeg = isNeg;}return result;
};RSAUtils.biCopy = function(bi) {var result = new BigInt(true);result.digits = bi.digits.slice(0);result.isNeg = bi.isNeg;return result;
};RSAUtils.reverseStr = function(s) {var result = "";for (var i = s.length - 1; i > -1; --i) {result += s.charAt(i);}return result;
};var hexatrigesimalToChar = ['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'
];RSAUtils.biToString = function(x, radix) { // 2 <= radix <= 36var b = new BigInt();b.digits[0] = radix;var qr = RSAUtils.biDivideModulo(x, b);var result = hexatrigesimalToChar[qr[1].digits[0]];while (RSAUtils.biCompare(qr[0], bigZero) == 1) {qr = RSAUtils.biDivideModulo(qr[0], b);digit = qr[1].digits[0];result += hexatrigesimalToChar[qr[1].digits[0]];}return (x.isNeg ? "-" : "") + RSAUtils.reverseStr(result);
};RSAUtils.biToDecimal = function(x) {var b = new BigInt();b.digits[0] = 10;var qr = RSAUtils.biDivideModulo(x, b);var result = String(qr[1].digits[0]);while (RSAUtils.biCompare(qr[0], bigZero) == 1) {qr = RSAUtils.biDivideModulo(qr[0], b);result += String(qr[1].digits[0]);}return (x.isNeg ? "-" : "") + RSAUtils.reverseStr(result);
};var hexToChar = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9','a', 'b', 'c', 'd', 'e', 'f'];RSAUtils.digitToHex = function(n) {var mask = 0xf;var result = "";for (i = 0; i < 4; ++i) {result += hexToChar[n & mask];n >>>= 4;}return RSAUtils.reverseStr(result);
};RSAUtils.biToHex = function(x) {var result = "";var n = RSAUtils.biHighIndex(x);for (var i = RSAUtils.biHighIndex(x); i > -1; --i) {result += RSAUtils.digitToHex(x.digits[i]);}return result;
};RSAUtils.charToHex = function(c) {var ZERO = 48;var NINE = ZERO + 9;var littleA = 97;var littleZ = littleA + 25;var bigA = 65;var bigZ = 65 + 25;var result;if (c >= ZERO && c <= NINE) {result = c - ZERO;} else if (c >= bigA && c <= bigZ) {result = 10 + c - bigA;} else if (c >= littleA && c <= littleZ) {result = 10 + c - littleA;} else {result = 0;}return result;
};RSAUtils.hexToDigit = function(s) {var result = 0;var sl = Math.min(s.length, 4);for (var i = 0; i < sl; ++i) {result <<= 4;result |= RSAUtils.charToHex(s.charCodeAt(i));}return result;
};RSAUtils.biFromHex = function(s) {var result = new BigInt();var sl = s.length;for (var i = sl, j = 0; i > 0; i -= 4, ++j) {result.digits[j] = RSAUtils.hexToDigit(s.substr(Math.max(i - 4, 0), Math.min(i, 4)));}return result;
};RSAUtils.biFromString = function(s, radix) {var isNeg = s.charAt(0) == '-';var istop = isNeg ? 1 : 0;var result = new BigInt();var place = new BigInt();place.digits[0] = 1; // radix^0for (var i = s.length - 1; i >= istop; i--) {var c = s.charCodeAt(i);var digit = RSAUtils.charToHex(c);var biDigit = RSAUtils.biMultiplyDigit(place, digit);result = RSAUtils.biAdd(result, biDigit);place = RSAUtils.biMultiplyDigit(place, radix);}result.isNeg = isNeg;return result;
};RSAUtils.biDump = function(b) {return (b.isNeg ? "-" : "") + b.digits.join(" ");
};RSAUtils.biAdd = function(x, y) {var result;if (x.isNeg != y.isNeg) {y.isNeg = !y.isNeg;result = RSAUtils.biSubtract(x, y);y.isNeg = !y.isNeg;}else {result = new BigInt();var c = 0;var n;for (var i = 0; i < x.digits.length; ++i) {n = x.digits[i] + y.digits[i] + c;result.digits[i] = n % biRadix;c = Number(n >= biRadix);}result.isNeg = x.isNeg;}return result;
};RSAUtils.biSubtract = function(x, y) {var result;if (x.isNeg != y.isNeg) {y.isNeg = !y.isNeg;result = RSAUtils.biAdd(x, y);y.isNeg = !y.isNeg;} else {result = new BigInt();var n, c;c = 0;for (var i = 0; i < x.digits.length; ++i) {n = x.digits[i] - y.digits[i] + c;result.digits[i] = n % biRadix;// Stupid non-conforming modulus operation.if (result.digits[i] < 0) result.digits[i] += biRadix;c = 0 - Number(n < 0);}// Fix up the negative sign, if any.if (c == -1) {c = 0;for (var i = 0; i < x.digits.length; ++i) {n = 0 - result.digits[i] + c;result.digits[i] = n % biRadix;// Stupid non-conforming modulus operation.if (result.digits[i] < 0) result.digits[i] += biRadix;c = 0 - Number(n < 0);}// Result is opposite sign of arguments.result.isNeg = !x.isNeg;} else {// Result is same sign.result.isNeg = x.isNeg;}}return result;
};RSAUtils.biHighIndex = function(x) {var result = x.digits.length - 1;while (result > 0 && x.digits[result] == 0) --result;return result;
};RSAUtils.biNumBits = function(x) {var n = RSAUtils.biHighIndex(x);var d = x.digits[n];var m = (n + 1) * bitsPerDigit;var result;for (result = m; result > m - bitsPerDigit; --result) {if ((d & 0x8000) != 0) break;d <<= 1;}return result;
};RSAUtils.biMultiply = function(x, y) {var result = new BigInt();var c;var n = RSAUtils.biHighIndex(x);var t = RSAUtils.biHighIndex(y);var u, uv, k;for (var i = 0; i <= t; ++i) {c = 0;k = i;for (j = 0; j <= n; ++j, ++k) {uv = result.digits[k] + x.digits[j] * y.digits[i] + c;result.digits[k] = uv & maxDigitVal;c = uv >>> biRadixBits;//c = Math.floor(uv / biRadix);}result.digits[i + n + 1] = c;}// Someone give me a logical xor, please.result.isNeg = x.isNeg != y.isNeg;return result;
};RSAUtils.biMultiplyDigit = function(x, y) {var n, c, uv;result = new BigInt();n = RSAUtils.biHighIndex(x);c = 0;for (var j = 0; j <= n; ++j) {uv = result.digits[j] + x.digits[j] * y + c;result.digits[j] = uv & maxDigitVal;c = uv >>> biRadixBits;//c = Math.floor(uv / biRadix);}result.digits[1 + n] = c;return result;
};RSAUtils.arrayCopy = function(src, srcStart, dest, destStart, n) {var m = Math.min(srcStart + n, src.length);for (var i = srcStart, j = destStart; i < m; ++i, ++j) {dest[j] = src[i];}
};var highBitMasks = [0x0000, 0x8000, 0xC000, 0xE000, 0xF000, 0xF800,0xFC00, 0xFE00, 0xFF00, 0xFF80, 0xFFC0, 0xFFE0,0xFFF0, 0xFFF8, 0xFFFC, 0xFFFE, 0xFFFF];RSAUtils.biShiftLeft = function(x, n) {var digitCount = Math.floor(n / bitsPerDigit);var result = new BigInt();RSAUtils.arrayCopy(x.digits, 0, result.digits, digitCount,result.digits.length - digitCount);var bits = n % bitsPerDigit;var rightBits = bitsPerDigit - bits;for (var i = result.digits.length - 1, i1 = i - 1; i > 0; --i, --i1) {result.digits[i] = ((result.digits[i] << bits) & maxDigitVal) |((result.digits[i1] & highBitMasks[bits]) >>>(rightBits));}result.digits[0] = ((result.digits[i] << bits) & maxDigitVal);result.isNeg = x.isNeg;return result;
};var lowBitMasks = [0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F,0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF,0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF];RSAUtils.biShiftRight = function(x, n) {var digitCount = Math.floor(n / bitsPerDigit);var result = new BigInt();RSAUtils.arrayCopy(x.digits, digitCount, result.digits, 0,x.digits.length - digitCount);var bits = n % bitsPerDigit;var leftBits = bitsPerDigit - bits;for (var i = 0, i1 = i + 1; i < result.digits.length - 1; ++i, ++i1) {result.digits[i] = (result.digits[i] >>> bits) |((result.digits[i1] & lowBitMasks[bits]) << leftBits);}result.digits[result.digits.length - 1] >>>= bits;result.isNeg = x.isNeg;return result;
};RSAUtils.biMultiplyByRadixPower = function(x, n) {var result = new BigInt();RSAUtils.arrayCopy(x.digits, 0, result.digits, n, result.digits.length - n);return result;
};RSAUtils.biDivideByRadixPower = function(x, n) {var result = new BigInt();RSAUtils.arrayCopy(x.digits, n, result.digits, 0, result.digits.length - n);return result;
};RSAUtils.biModuloByRadixPower = function(x, n) {var result = new BigInt();RSAUtils.arrayCopy(x.digits, 0, result.digits, 0, n);return result;
};RSAUtils.biCompare = function(x, y) {if (x.isNeg != y.isNeg) {return 1 - 2 * Number(x.isNeg);}for (var i = x.digits.length - 1; i >= 0; --i) {if (x.digits[i] != y.digits[i]) {if (x.isNeg) {return 1 - 2 * Number(x.digits[i] > y.digits[i]);} else {return 1 - 2 * Number(x.digits[i] < y.digits[i]);}}}return 0;
};RSAUtils.biDivideModulo = function(x, y) {var nb = RSAUtils.biNumBits(x);var tb = RSAUtils.biNumBits(y);var origYIsNeg = y.isNeg;var q, r;if (nb < tb) {// |x| < |y|if (x.isNeg) {q = RSAUtils.biCopy(bigOne);q.isNeg = !y.isNeg;x.isNeg = false;y.isNeg = false;r = biSubtract(y, x);// Restore signs, 'cause they're references.x.isNeg = true;y.isNeg = origYIsNeg;} else {q = new BigInt();r = RSAUtils.biCopy(x);}return [q, r];}q = new BigInt();r = x;// Normalize Y.var t = Math.ceil(tb / bitsPerDigit) - 1;var lambda = 0;while (y.digits[t] < biHalfRadix) {y = RSAUtils.biShiftLeft(y, 1);++lambda;++tb;t = Math.ceil(tb / bitsPerDigit) - 1;}// Shift r over to keep the quotient constant. We'll shift the// remainder back at the end.r = RSAUtils.biShiftLeft(r, lambda);nb += lambda; // Update the bit count for x.var n = Math.ceil(nb / bitsPerDigit) - 1;var b = RSAUtils.biMultiplyByRadixPower(y, n - t);while (RSAUtils.biCompare(r, b) != -1) {++q.digits[n - t];r = RSAUtils.biSubtract(r, b);}for (var i = n; i > t; --i) {var ri = (i >= r.digits.length) ? 0 : r.digits[i];var ri1 = (i - 1 >= r.digits.length) ? 0 : r.digits[i - 1];var ri2 = (i - 2 >= r.digits.length) ? 0 : r.digits[i - 2];var yt = (t >= y.digits.length) ? 0 : y.digits[t];var yt1 = (t - 1 >= y.digits.length) ? 0 : y.digits[t - 1];if (ri == yt) {q.digits[i - t - 1] = maxDigitVal;} else {q.digits[i - t - 1] = Math.floor((ri * biRadix + ri1) / yt);}var c1 = q.digits[i - t - 1] * ((yt * biRadix) + yt1);var c2 = (ri * biRadixSquared) + ((ri1 * biRadix) + ri2);while (c1 > c2) {--q.digits[i - t - 1];c1 = q.digits[i - t - 1] * ((yt * biRadix) | yt1);c2 = (ri * biRadix * biRadix) + ((ri1 * biRadix) + ri2);}b = RSAUtils.biMultiplyByRadixPower(y, i - t - 1);r = RSAUtils.biSubtract(r, RSAUtils.biMultiplyDigit(b, q.digits[i - t - 1]));if (r.isNeg) {r = RSAUtils.biAdd(r, b);--q.digits[i - t - 1];}}r = RSAUtils.biShiftRight(r, lambda);// Fiddle with the signs and stuff to make sure that 0 <= r < y.q.isNeg = x.isNeg != origYIsNeg;if (x.isNeg) {if (origYIsNeg) {q = RSAUtils.biAdd(q, bigOne);} else {q = RSAUtils.biSubtract(q, bigOne);}y = RSAUtils.biShiftRight(y, lambda);r = RSAUtils.biSubtract(y, r);}// Check for the unbelievably stupid degenerate case of r == -0.if (r.digits[0] == 0 && RSAUtils.biHighIndex(r) == 0) r.isNeg = false;return [q, r];
};RSAUtils.biDivide = function(x, y) {return RSAUtils.biDivideModulo(x, y)[0];
};RSAUtils.biModulo = function(x, y) {return RSAUtils.biDivideModulo(x, y)[1];
};RSAUtils.biMultiplyMod = function(x, y, m) {return RSAUtils.biModulo(RSAUtils.biMultiply(x, y), m);
};RSAUtils.biPow = function(x, y) {var result = bigOne;var a = x;while (true) {if ((y & 1) != 0) result = RSAUtils.biMultiply(result, a);y >>= 1;if (y == 0) break;a = RSAUtils.biMultiply(a, a);}return result;
};RSAUtils.biPowMod = function(x, y, m) {var result = bigOne;var a = x;var k = y;while (true) {if ((k.digits[0] & 1) != 0) result = RSAUtils.biMultiplyMod(result, a, m);k = RSAUtils.biShiftRight(k, 1);if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;a = RSAUtils.biMultiplyMod(a, a, m);}return result;
};$w.BarrettMu = function(m) {this.modulus = RSAUtils.biCopy(m);this.k = RSAUtils.biHighIndex(this.modulus) + 1;var b2k = new BigInt();b2k.digits[2 * this.k] = 1; // b2k = b^(2k)this.mu = RSAUtils.biDivide(b2k, this.modulus);this.bkplus1 = new BigInt();this.bkplus1.digits[this.k + 1] = 1; // bkplus1 = b^(k+1)this.modulo = BarrettMu_modulo;this.multiplyMod = BarrettMu_multiplyMod;this.powMod = BarrettMu_powMod;
};function BarrettMu_modulo(x) {var $dmath = RSAUtils;var q1 = $dmath.biDivideByRadixPower(x, this.k - 1);var q2 = $dmath.biMultiply(q1, this.mu);var q3 = $dmath.biDivideByRadixPower(q2, this.k + 1);var r1 = $dmath.biModuloByRadixPower(x, this.k + 1);var r2term = $dmath.biMultiply(q3, this.modulus);var r2 = $dmath.biModuloByRadixPower(r2term, this.k + 1);var r = $dmath.biSubtract(r1, r2);if (r.isNeg) {r = $dmath.biAdd(r, this.bkplus1);}var rgtem = $dmath.biCompare(r, this.modulus) >= 0;while (rgtem) {r = $dmath.biSubtract(r, this.modulus);rgtem = $dmath.biCompare(r, this.modulus) >= 0;}return r;
}function BarrettMu_multiplyMod(x, y) {/*x = this.modulo(x);y = this.modulo(y);*/var xy = RSAUtils.biMultiply(x, y);return this.modulo(xy);
}function BarrettMu_powMod(x, y) {var result = new BigInt();result.digits[0] = 1;var a = x;var k = y;while (true) {if ((k.digits[0] & 1) != 0) result = this.multiplyMod(result, a);k = RSAUtils.biShiftRight(k, 1);if (k.digits[0] == 0 && RSAUtils.biHighIndex(k) == 0) break;a = this.multiplyMod(a, a);}return result;
}var RSAKeyPair = function(encryptionExponent, decryptionExponent, modulus) {var $dmath = RSAUtils;this.e = $dmath.biFromHex(encryptionExponent);this.d = $dmath.biFromHex(decryptionExponent);this.m = $dmath.biFromHex(modulus);// We can do two bytes per digit, so// chunkSize = 2 * (number of digits in modulus - 1).// Since biHighIndex returns the high index, not the number of digits, 1 has// already been subtracted.this.chunkSize = 2 * $dmath.biHighIndex(this.m);this.radix = 16;this.barrett = new $w.BarrettMu(this.m);
};RSAUtils.getKeyPair = function(encryptionExponent, decryptionExponent, modulus) {return new RSAKeyPair(encryptionExponent, decryptionExponent, modulus);
};if(typeof $w.twoDigit === 'undefined') {$w.twoDigit = function(n) {return (n < 10 ? "0" : "") + String(n);};
}// Altered by Rob Saunders (rob@robsaunders.net). New routine pads the
// string after it has been converted to an array. This fixes an
// incompatibility with Flash MX's ActionScript.
RSAUtils.encryptedString = function(key, s) {var a = [];var sl = s.length;var i = 0;while (i < sl) {a[i] = s.charCodeAt(i);i++;}while (a.length % key.chunkSize != 0) {a[i++] = 0;}var al = a.length;var result = "";var j, k, block;for (i = 0; i < al; i += key.chunkSize) {block = new BigInt();j = 0;for (k = i; k < i + key.chunkSize; ++j) {block.digits[j] = a[k++];block.digits[j] += a[k++] << 8;}var crypt = key.barrett.powMod(block, key.e);var text = key.radix == 16 ? RSAUtils.biToHex(crypt) : RSAUtils.biToString(crypt, key.radix);result += text + " ";}return result.substring(0, result.length - 1); // Remove last space.
};RSAUtils.decryptedString = function(key, s) {var blocks = s.split(" ");var result = "";var i, j, block;for (i = 0; i < blocks.length; ++i) {var bi;if (key.radix == 16) {bi = RSAUtils.biFromHex(blocks[i]);}else {bi = RSAUtils.biFromString(blocks[i], key.radix);}block = key.barrett.powMod(bi, key.d);for (j = 0; j <= RSAUtils.biHighIndex(block); ++j) {result += String.fromCharCode(block.digits[j] & 255,block.digits[j] >> 8);}}// Remove trailing null, if any.if (result.charCodeAt(result.length - 1) == 0) {result = result.substring(0, result.length - 1);}return result;
};RSAUtils.setMaxDigits(130);})(window);

然后该怎么玩懂的人都懂哈,为了不被老湿请去喝茶,就写到这里吧。

关于某某大学校园网认证系统的一些工作相关推荐

  1. 校园网认证系统安全测试(绕过)

    关爱在校大学生,反对高校封校,高校不是监狱,开学不是坐牢!!! 文章目录 前言 前言 任何未经授权的渗透测试都是违法犯罪!!!未授权的信息收集是盗窃的犯罪行为!!!今天我来带各位高校的校园网运维来看一 ...

  2. 校园网认证系统-802.1x协议介绍

    本文转自http://hi.baidu.com/xinghui100/blog/item/e0edb36dbbacb8fe43169405.html 802.1x协议解析 802.1X协议是由(美)电 ...

  3. 校园网未能找到pppoe服务器6,校园网PPPOE接入认证系统的研究与实现.doc

    校园网PPPOE接入认证系统的研究与实现.doc 校园网PPPOE接入认证系统的研究与实现 [ 摘 要 ] 为了解决网络用户方便.快速.安全的接入并访问校内外资源,本文研究了PPPOE校园网认证及授权 ...

  4. 桌面系统集成WEB认证系统方案

    最近做的一个项目,有WEB版.WPF版.手机版.领导想集成集团的一个现成的认证系统,姑且称这个认证系统名为 W4认证系统. W4认证系统有如下特点: 1.现成的 2.是个单点登录系统 3.不支持oAu ...

  5. 深澜系统服务器架构,深澜基于用户策略的高性能校园网认证计费系统

    概述 网络发展到现今,教育行业的网络的应用已经获得了长足的发展.随着网络应用的深入,宽带接入互联网显现了很多亟待解决的管理问题.校园网迫切需要对于上网用户进行必要的管理. 随着上网用户数量的增加,校园 ...

  6. 浦江县教育计算机网上网认证系统,校园网使用FAQ

    1.校园有线网络上网客户端下载和使用说明 校园网锐捷认证客户端(windows版) 校园网锐捷认证客户端(Linux版) 校园网锐捷认证客户端(Mac OS版) 2.校园网络报修说明(电话报修或网络报 ...

  7. 生物识别最新进展:动态密码语音无监督身份认证系统通过科技成果鉴定

    近日,由中国电子学会主持召开的"基于动态密码语音的无监督身份认证系统"科技成果鉴定会在清华大学举办,AI科技大本营受邀出席. 该成果由清华大学.北京得意音通技术有限责任公司共同完成 ...

  8. 校园网服务器系统方案设计,校园网服务器系统项目设计方案.pdf

    校园网服务器系统项 目设计方案 第二章方案概述 随着高等教育改革的深入 , 面对这一问题,各高校都走了改革之 路:运用现代信息技术,全面更新教学管理手段,建立现代教育管理 模式. 近几年来, 各高校都 ...

  9. 计算机毕业设计Java创新学分认证系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java创新学分认证系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java创新学分认证系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 ...

最新文章

  1. python可视化窗口制作一个摇骰子游戏_使用python制作一个抽奖小游戏——骰子游戏...
  2. 最新Java培训-NIO实战教程
  3. 典型的开发国内小项目没失败的经验分享
  4. Day2-数据类型、字符编码、购物车
  5. 【特征选择】基础知识
  6. 被绞杀的网景:互联网门口第一滴血,互联网营销
  7. php mysql 写法_php 类的写法
  8. 工作资讯004---多范式编程语言
  9. 图数据库 Neo4j 学习总结
  10. 华为鸿蒙os和麒麟os区别,麒麟、鸿蒙皆自研,为何华为不像苹果将系统同时推送?...
  11. pyspark连接SQLServer数据库,执行SQL语句,返回数据查询结果
  12. API激光跟踪仪SDK基础使用
  13. java语言的编译器命令_Java编译器命令行功能
  14. 正态分布t个标准差范围内的概率
  15. C#版OPCClient代码总结
  16. python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章
  17. 如何防止工具(八门神器)进行内存修改(转)
  18. android壁纸保存目录,如何获取安卓手机当前壁纸的路径
  19. 弹性盒模型(flex-box)
  20. Wine零知识学习1 —— 介绍

热门文章

  1. Mathmatica9 注册不了
  2. 如何关闭任务栏中chrome浏览器的通知图标
  3. 使用GCD 转自 Posted by 唐巧
  4. Python批量改变图片名字
  5. dns配置异常怎么修复_dns配置异常不能上网如何修复
  6. Messari分析师:买下一个JEPG时,先看看其存储层和元数据信息
  7. AI+医疗如何商业破冰?6位一线专家这样说
  8. 我的第一个小程序(Discuz! + 微信小程序)
  9. 你是哪一型---左右脑性格测试(转)
  10. 基因序列 深度学习Deep Learning for Genomics: A Concise Overview