之前接了个单,使用协议登录东方财富证券交易网站,登录界面如图所示
输入账号密码和验证码实现登录,验证码这个好办,之前写了个通用的接口,先登录抓下登录的数据包,随便输入几个账号密码,如图所示
数据包点进去,如图所示
查看其数据包,登录的几个参数,userId为账号,password为密码,经过加密了的,duration为保持登录时长3小时,除了password加密了其他的都为明文,开始来查看这个加密参数,全局搜索ctrl+shift+F,输入password字段,搜索查询结果如图
看到encrypt,差不多加密就在这里了,在这行打上断点,登录重新提交下,如图所示
可以看见我输入的密码明文是123456,经过EMTradeEncrypt,encrypt函数加密,我们点开这个函数,鼠标选定,如图所示
熟悉js语法的人很容易看到是RSA加密,公钥一串字符串直接复制即可,对于python实现RSA加密代码如下所示
def _encrpt(string, public_key):
rsakey = RSA.importKey(public_key) # 读取公钥
cipher = Cipher_pksc1_v1_5.new(rsakey)
# 因为encryptor.encrypt方法其内部就实现了加密再次Base64加密的过程,所以这里实际是通过下面的1和2完成了JSEncrypt的加密方法
encrypt_text = cipher.encrypt(string.encode()) # 1.对账号密码组成的字符串加密
cipher_text_tmp = base64.b64encode(encrypt_text) # 2.对加密后的字符串base64加密
return cipher_text_tmp.decode()
def gen_body(pwd, public_key):
'''根据账号密码生成请求的body然后调用_encrpt方法加密'''
encrypt_res = _encrpt(pwd,public_key)
return encrypt_res
最后的登录实现效果如图所示
点击此处登录后即可评论