查看网页源码,发现有相关代码
可以看出password的值大概是用RSA以modulus, exponet为公钥加密后的一串字符;
modulus和exponet都是js变量,在浏览器的开发者工具中可以先查看相关值;Console窗口;
在上述的js代码中可以发现modulus,exponet都是来之getPublicKey.do返回的数据;
jQuery.getJSON("getPublicKey.do",function(data){
modulus = data["modulus"];
exponent = data["exponent"];
});
requests提交get请求
s = requests.Session()
publickey = s.get(rsaurl).text
publickey = json.loads(publickey)
# print(publickey["exponent"],publickey["modulus"])
这样就得到了modulus,exponet的值;
接下来还原js的加密过程,得到最终的值enPassword;
本来想用Python的Crypto库来还原RSA加密过程,失败;
于是选择在Python中执行js,得到加密的值,因为在正常访问时一样是在浏览器中执行的加密过程;
相关库:execjs,参考:pyv8的安装和使用:python中执行js代码
网页源代码中可以看到rsa相关的js文件;全部下载;
def getEnPwd(modulus, exponent, pwd):
jsstr = ""
for filename in os.listdir('./js'):
f = open('./js/' + filename)
jsstr += f.read() # 读取所有的js代码
f.close()
ctx = execjs.compile(jsstr) # .compile
return ctx.call('getenpwd', modulus, exponent, pwd) # 调用指定的函数
# print(ctx.call('enString', '123456'))
这个函数执行js返回密码加密后的值;