【ValueError: RSA key format is not supported】

背景

用固定的公钥加密,加密算法SHA256加密,那么如何通过python实现密码加密后的传输

场景

实际使用的登录接口中,前端把传入的密码字段经过加密后传给后段解密,那我们去模拟接口的时候,也需要把密码字段加密传输给后端(这里后端和前端约定了一对公钥和私钥(固定)),后端再去使用公钥去解密验证,验证通过则登录成功,否则失败

一般情况下后端把公钥提供给前端,前端用这个固定的公钥去加密,然后加密传入密码,接口验证的时候通过私钥去解密,验证通过则登录成功,否则失败,但这公钥如果修改了,那么就不行了,如果不会改动那么无所谓)

上代码

python 复制代码
import base64
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pkcs1_v1_5
import requests

publicKey = 'MIGfMA0GCSq8oexpukPN4/ypzp64UA5CQENSA41ZxTpYADbFQsiX9Spv6aDHhHzUlZtWRru9ptcFO3tDKq0ACTOAR1ZEHFwQGhzwaAowID'

def crack_pwd(pwd):
    #将publicKey组成公钥的格式,
    key = '-----BEGIN PUBLIC KEY----- \n' +publicKey +'\n-----END PUBLIC KEY-----'	#注意上述key的格式
#d导入读取后的公钥
    rsakey = RSA.importKey(key)
    cipher = Cipher_pkcs1_v1_5.new(rsakey)  # 生成对象
    cipher_text = base64.b64encode(cipher.encrypt(pwd.encode(encoding="utf-8")))  # 对传递进来的用户名或密码字符串加密
    value = cipher_text.decode('utf8')  # 将加密获取到的bytes类型密文解码成str类型
    return value
pwd = "123456"
# 这种方式加密密文的长度最多只能53个数字和英文字母。  这个跟公钥有关

encrypted = crack_pwd(pwd)
print(encrypted)

header={"Content-Type": "application/json"}
pyload={"userName":"admin","password":encrypted}
url="http://xx.xx.x..x/sys/user/login"
response=requests.post(url=url,json=pyload,headers=header)
print(response.text)
print(response.json()['data']['token'])

注意

python 复制代码
1、以上的 key要使用这种方式拼接,不然好像容易有问题
  '-----BEGIN PUBLIC KEY----- \n' +publicKey +'\n-----END PUBLIC KEY-----'	#注意上述key的格式
  2、在python中安装模块RSA、Crypto还会遇到问题
  ##明明安装了Crypto还是会报错,此时还需要安装pycryptodome
  pip3 install Crypto -i  https://pypi.tuna.tsinghua.edu.cn/simple
  pip3 list
 pip3 install pycryptodome -i  https://pypi.tuna.tsinghua.edu.cn/simple
相关推荐
搏博17 分钟前
基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程
windows·python·自然语言处理·flask·中文分词
lxmyzzs1 小时前
pyqt5无法显示opencv绘制文本和掩码信息
python·qt·opencv
Coovally AI模型快速验证2 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun2 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
萧鼎2 小时前
Python pyzmq 库详解:从入门到高性能分布式通信
开发语言·分布式·python
RaymondZhao343 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
zhangfeng11333 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
yujkss3 小时前
Python脚本每天爬取微博热搜-终版
开发语言·python
yzx9910133 小时前
小程序开发APP
开发语言·人工智能·python·yolo
飞翔的佩奇4 小时前
【完整源码+数据集+部署教程】二维码与查找模式检测系统源码和数据集:改进yolo11-CSwinTransformer
python·yolo·计算机视觉·数据集·yolo11·二维码与查找模式检测