填坑接口自动化-UPI-JWS签名

大概是Base64(原始header) + Base64(SHA256WithRSA(Base64(原始header)+'.'+Base64(data)))这两大部分,当然中间还有拼一些东西,属于机密

header里面有随机数和时间

random= ''.join(random.sample(string.digits + string.ascii_letters,32))

时间就这样的int(time.time())

拼成header,在urlbase64, base64.urlsafe_b64encode(json.dumps(header,separators=(',',':')).encode()).decode().strip('=')

这里记录一下jsondumps的坑啊,直接dumps的数据,没个key-value后面都有空格,导致签名结果总是长一些,要用这种方式去空格json.dumps(header,separators=(',',':'))

还有一个坑,如果data里面有中文,json dumps的的时候一定要加ensure_ascii=False,否则签名又不对了

base64_data = base64.urlsafe_b64encode(json.dumps(data1,ensure_ascii=False,separators=(',',':')).encode()).decode().strip('=')

python用的 pycryptodome这个库,pkcs1的规范,java好像是7,用的时候证书要换一下格式

from Crypto.Signature import PKCS1_v1_5 as Sign_PK 

#摘要处理原文
digest_data = SHA256.new(part2.encode("utf8"))

with open('data/private.pem') as f:
key = f.read()
rsa_key = RSA.import_key(key)
#私钥签名
sign_pk = Sign_PK.new(rsa_key)
sign_data = sign_pk.sign(digest_data)

 

posted @ 2021-06-19 11:34  东方小小白  阅读(144)  评论(0)    收藏  举报