在实际接口传递信息过程中,时常会用到加密传输的操作,本文主要定义了私钥加签和base64编码格式,采用的是rsa2签名,待签名字符串需要先根据特定规则排序后再签名,需要注意提前配置好所需要的包,其次关于私钥有特定的格式要求,如果你都已经到签名这一步了,相信你已经获取到正确的私钥了,这里就不过多赘述。
from Crypto.Hash import SHA256
from Crypto.Signature import PKCS1_v1_5 as Sig_pk
from Crypto.PublicKey import RSA
import base64
def sign_str(parm):
str_parm = ''
for p in sorted(parm):
# print(p)
if p in ['sign','signType'] or not parm[p]:
continue
elif isinstance(parm[p], dict):
str_parm += str(p) + "=" + "{" + sign_str(parm[p]) + "}" + "&"
else:
str_parm += str(p) + "=" + str(parm[p]) + "&"
return str_parm[:-1]
def sign_by_private_key(sortData, private_key):
"""
ras2签名
"""
# 获取私钥
key = base64.b64decode(private_key)
rsakey = RSA.importKey(key)
# 根据sha算法处理签名内容 (此处的hash算法不一定是sha,看开发)
data = SHA256.new(sortData.encode())
# 私钥进行签名
sig_pk = Sig_pk.new(rsakey)
signer = sig_pk.sign(data)
# 将签名后的内容,转换为base64编码
result = base64.b64encode(signer)
# 签名结果转换成字符串
data = result.decode()
return data