#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021-12-03 8:20
# @Author : herry
# @File : Sign.py
# @software: PyCharm
# @describe: Sign
import base64
import hmac
import json
import urllib
def createSignatureWithParams(param, secretKey):
"""
生成加密Sign,先Hmac签名,再base64
:param : 加密JSON字符串
:secretKey : 加密密钥
:return: 返回签名后的字符串
"""
# param = json.loads(param)
del param["signature"]
#降序
paramKey = sorted(param)
#以下是参数组装规则,具体的已实际要求为准
ret = ""
for key in paramKey:
if type(param[key]) is dict or type(param[key]) is list:
str_value = json.dumps(param[key], separators=(',', ':'))
else:
str_value = param[key]
ret = ret + key + "=" + urllib.parse.quote_plus(str_value[0:200],
encoding="utf-8",
safe=" ") + "&" # urllib.parse.quote() 字符串转码Unicode
ret = ret[0:-1]
#hmac签名
hash_key = hmac.new(secretKey.encode("utf-8"), ret.encode('utf-8'),
digestmod='SHA256') # 参数需要的时Bytes类型的,因此做了encode编码
base64_hash_key = base64.b64encode(hash_key.hexdigest().encode("utf-8")) # 返回的是bytes类型
#赋值给原来的密钥字段
param["signature"] = base64_hash_key.decode()
return param
-------------------------------------最后---------------------------------
更多软件测试相关内容请关注“软件测试道与术”公众号或扫描下方二维码