python使用pycryptodome模块实现RSA加密

文章讲述了在接口自动化测试中,如何处理登录接口的加密账号密码,通过获取验证码接口的RSA公钥对明文进行加密并转换为Base64格式的方法,以及使用pycryptodome库实现的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

我们在做接口自动化测试时,可能会有以下场景: 

请求登录接口,但登录接口中的账号密码是需要加密的,这时直接用明文将会请求失败;

发现账号密码是根据获取验证码接口中的RSA公钥来加密的(RSA加密流程:https://blog.youkuaiyun.com/u013263917/article/details/102674345

36dc347a84be4def87183b23880b6b7b.png

 

6ac06ad5fbd74e3dbac04a7ad045a8aa.png

 

大致思路如下:

从获取验证码接口响应数据中拿到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)

结果:

183fe5d4bfff4040a018e761adf29c9d.png

 

以上例子来源于我的项目实战,有遇到相同问题的可以借鉴。

 

使用pycryptodome库来实现RSA加密和解密,可以按照以下步骤进行操作: 1. 导入所需模块: ```python from Cryptodome.PublicKey import RSA from Cryptodome.Cipher import PKCS1_OAEP ``` 2. 生成RSA密钥对: ```python key = RSA.generate(2048) # 生成一个2048位的RSA密钥对 ``` 3. 获取公钥和私钥: ```python private_key = key.export_key() # 获取私钥 public_key = key.publickey().export_key() # 获取公钥 ``` 4. 使用公钥加密数据: ```python public_key = RSA.import_key(public_key) cipher = PKCS1_OAEP.new(public_key) ciphertext = cipher.encrypt(b'Hello, pycryptodome!') print(ciphertext) ``` 5. 使用私钥解密数据: ```python private_key = RSA.import_key(private_key) cipher = PKCS1_OAEP.new(private_key) decrypted_text = cipher.decrypt(ciphertext) print(decrypted_text) ``` 完整的示例代码如下所示: ```python from Cryptodome.PublicKey import RSA from Cryptodome.Cipher import PKCS1_OAEP # 生成RSA密钥对 key = RSA.generate(2048) # 获取公钥和私钥 private_key = key.export_key() public_key = key.publickey().export_key() # 使用公钥加密数据 public_key = RSA.import_key(public_key) cipher = PKCS1_OAEP.new(public_key) ciphertext = cipher.encrypt(b'Hello, pycryptodome!') print(ciphertext) # 使用私钥解密数据 private_key = RSA.import_key(private_key) cipher = PKCS1_OAEP.new(private_key) decrypted_text = cipher.decrypt(ciphertext) print(decrypted_text) ``` 这样,你就可以使用pycryptodome库来实现RSA加密和解密了。请注意,RSA算法的安全性依赖于密钥的长度,一般推荐使用2048位或更长的密钥。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值