【ValueError: RSA key format is not supported】
2023-12-18 16:56:59
背景
用固定的公钥加密,加密算法SHA256加密,那么如何通过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'])
注意
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
文章来源:https://blog.csdn.net/dghrty_show/article/details/135022358
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!