用Python登陆新版正方教务系统获取课程表(及RSA加密密码实现)

该文章已生成可运行项目,

前言

最近做一个微信小程序,需要登录教务系统。提前用python尝试一下登录接口,并获取到课表打印出来。

我们学校用到新版正方教务系统,长这个样子。

在这里插入图片描述
相比旧版的教务系统,唯一好处是不用输入二维码方便爬虫登录。但登录时用到RSA加密密码发送请求。


正文

分析网页:
在网页上填上随便写的账号密码,点击登录。开发者工具记录如下:

在这里插入图片描述

首先它点击登录后,提交一个表单,Form Data一共有4个数据

提交的数据 解释
csrftoken 为了防止跨站域请求伪造 。在登录页源码里有,每次刷新都会变更
yhm 输入的用户名
mm 输入的密码,被加密过。我们主要关注这一个加密过程

csrftoken 如图所示:
在这里插入图片描述

另外,在开发者工具里,我们还需要注意服务器的一条get请求
在这里插入图片描述

查看它返回的数据
在这里插入图片描述
这条Get请求作用:发送当前时间戳,返回公共密钥。并且每次modulus的数据不同,有人会问,这个东西干嘛的?
其实,这是在密码加密时用到的公钥,如果你也曾看过它的密码加密代码,就会了解到。
我们翻一下网站的Javascript,看看密码加密过程

	$.getJSON(_path+"/xtgl/login_getPublicKey.html?time="+new Date().getTime(),function(data){
   
   
		modulus = data["modulus"];
		exponent = data["exponent"];
	});
		if($("#mmsfjm").val() == '0'){
   
   
			$("#hidMm").val($("#mm").val());
		}else{
   
   
			var rsaKey = new RSAKey();
			rsaKey.setPublic(b64tohex(modulus), b64tohex(exponent));
			var enPassword = hex2b64(rsaKey.encrypt($("#mm").val()));
			$("#mm").val(enPassword);
			$("#hidMm").val(enPassword);   
		}

具体加密过程:首先获取modulus,exponent。将他们从base64转16进制,再通过RSA算法生成公钥。
用公钥将密码生成私钥从16进制转回base64。变成最终加密的密码。

至此,我们分析完成,在python里面要做的步骤:
1、获取到csrftoken
2、发送时间戳获取到PublicKey
3、生成RSA加密的密码
4、POST请求登录


python实现过程

登录中唯一难点是生成rsa加密的密码,有大神把js的rsa算法写成python,具体在github里。我已经下载并放在项目文件夹下,直接调用。

头部文件:


                
本文章已经生成可运行项目
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值