背景:
我们在做接口自动化测试时,可能会有以下场景:
请求登录接口,但登录接口中的账号密码是需要加密的,这时直接用明文将会请求失败;
发现账号密码是根据获取验证码接口中的RSA公钥来加密的(RSA加密流程:https://blog.youkuaiyun.com/u013263917/article/details/102674345)
大致思路如下:
从获取验证码接口响应数据中拿到RSA公钥,用该公钥给账号密码明文加密,并转换成base64格式,就可以用来请求登陆接口了。
安装pycryptodome库:
pip install pycryptodome
代码示例:
from Crypto.PublicKey import RSA
import base64
from Crypto.Cipher import PKCS1_v1_5
def rsa_encryption(public_key_str,key): #public_key_str为RSA公钥,key为需要加密的明文
public_key = RSA.import_key(public_key_str) #读取公钥
cipher = PKCS1_v1_5.new(public_key) #创建加密器对象
text = cipher.encrypt(key.encode()) #加密
ciphertext = base64.b64encode(text).decode('utf-8') #对数据进行base64编码
return ciphertext
#调试:
public_key_str = '-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzC/hT2LIo4qKfTzBzmpe\nY5/cPTkvfB8x9X66lNA4KDfEcEg2BZ4RP0XO7Cjh/G7BebFgxlI5p6/0NarRi3Xc\nwLdXKbiaoUOjn6BeZnpHfUNMmvfR7asGHJfqhliqWwJdB/bD7oOamgmxbDCrfPlJ\nPxqoBpngA2zZLiIcLNF+jYoF5I6DVEVJq68aL+VeErr0lESapFjFusSEcTP9hoz8\nspAxhlfBKg+FdIdVIk9G2jRAhq9/nVvA2g0ALu1cmrn2gPXSamXm7DmRmpNGwej0\nZfzvGUH96NoxsSmCkbt7ZI+fMIF7iUkdFyN0eh6FkZEZ61trG6BTwVStZkeaVOpa\nCQIDAQAB\n-----END RSA PUBLIC KEY-----\n'
key = 'username"
rsa_encryption(public_key_str,key)
结果:
以上例子来源于我的项目实战,有遇到相同问题的可以借鉴。