代码实现如下:
import time
from Cryptodome.PublicKey import RSA
from Cryptodome.Signature import pkcs1_15
from Cryptodome.Hash import SHA256
from base64 import b64encode
import uuid
import csv
privatekey = "这里存放研发生成的私钥"
private_key = "-----BEGIN RSA PRIVATE KEY-----\n" + privatekey + "\n-----END RSA PRIVATE KEY-----"
timestamp = str(int(time.time())) # 生成的时间戳
nonce = uuid.uuid4().hex # 生成的随机数
# 读取本地的csv文件
with open('D:\Python\person.csv', 'r', encoding='utf-8') as file_obj:
# 1.创建reader对象
reader = csv.reader(file_obj)
# 2.遍历进行读取数据
for r in reader:
# 设置为入参
calltype = r[0]
versionCode = r[1]
# 字符串拼接
def GetSignData(terminal, versionCode):
stringA = ""
stringA = str("callerType=" + terminal + "&nonce=" + nonce + "×tamp=" + timestamp + "&version=" + versionCode)
return stringA
# 生成sign
def sign(signData):
rsa_key = RSA.importKey(private_key)
signer = pkcs1_15.new(rsa_key)
digest = SHA256.new(signData.encode('utf8'))
sign = b64encode(signer.sign(digest)).decode('utf8')
return sign
#调用GetSignData函数,获取参与签名的参数,返回新的字典数据
signData=GetSignData(calltype, versionCode)
#调用函数,返回需要加密的字符串
#print('拼接的字符串:'+ signData)
#调用函数,返回生辰的sign
print('生成的sign:'+ sign(signData))
执行结果
过程出现的问题:因为多加了+ ‘\n’,导致生成的sign不对,去掉之后,就对了