1. 导入所需模块
import base64
import rsa
import requests
import re
2. 获取公钥和seckey
使用requests库向登陆页面发送GET请求,获取html源代码。通过正则表达式提取公钥(pubKey)和seckey两个参数。
login_url = 'https://passport.iqiyi.com/apis/user/login.action'
response = requests.get(login_url)
html = response.content.decode('utf-8')
pattern = re.compile(r'"pubKey":"(.*?)".*?"seckey":"(.*?)"', re.S)
result = re.findall(pattern, html)
pubKey = result[0][0]
seckey = result[0][1]
3. 配置登陆参数
初始化一个session对象,将pubKey和seckey传入rsa.PublicKey和rsa.encrypt函数进行加密处理。
session = requests.session()
pub_key = rsa.PublicKey.load_pkcs1_openssl_pem(pubKey.encode())
public_key = rsa.encrypt(pub_key, seckey.encode())
public_key = base64.b64encode(public_key).decode('ascii')
data = {
'email': 'YourEmail',
'password': 'YourPassword',
'public_key': public_key,
# 其他参数...
}
4. 发送POST请求登陆
使用session对象发送POST请求,将data作为参数传入。
response = session.post(login_url, data=data)
if response.status_code == 200:
print("登陆成功")
else:
print("登陆失败")
5. 完整代码示例
import base64
import rsa
import requests
import re
login_url = 'https://passport.iqiyi.com/apis/user/login.action'
response = requests.get(login_url)
html = response.content.decode('utf-8')
pattern = re.compile(r'"pubKey":"(.*?)".*?"seckey":"(.*?)"', re.S)
result = re.findall(pattern, html)
pubKey = result[0][0]
seckey = result[0][1]
session = requests.session()
pub_key = rsa.PublicKey.load_pkcs1_openssl_pem(pubKey.encode())
public_key = rsa.encrypt(pub_key, seckey.encode())
public_key = base64.b64encode(public_key).decode('ascii')
data = {
'email': 'YourEmail',
'password': 'YourPassword',
'public_key': public_key,
# 其他参数...
}
response = session.post(login_url, data=data)
if response.status_code == 200:
print("登陆成功")
else:
print("登陆失败")
以上就是使用Python实现爱奇艺登录密码RSA加密的方法示例详解。通过获取登陆页面的html源代码,提取出公钥和seckey参数,并使用rsa库对seckey进行加密,然后将加密后的参数传递给登陆接口完成登陆操作。
注意:在实际使用时,需要将'YourEmail'和'YourPassword'替换为真实的邮箱和密码。
使用该方法可以有效保护用户的登录密码安全,并且在网络传输过程中不容易被恶意截获。同时,使用了requests和re模块来发送GET请求和进行正则表达式匹配,使得代码简洁明了。