填坑接口自动化-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)

浙公网安备 33010602011771号