MACSHA256加密生成签名
再水一篇,也是业务测试中遇到的一种加密方式,这里示例就直接使用相同的加密规则了,可以根据业务场景自行调整加密前字符串
加密规则
所有API的请求参数(除去Sign参数),参数名转小写后根据参数名称的AscII表顺序排序;
将排序号的参数名和参数值拼装在一起得到新的字符串A;
注:非Get请求,需要把body的值也拼接过去,把body内容作为一个参数值,参数名为 body,参与排序;
使用HMACSHA256对上述拼接出来的字符串A进行摘要计算 GetHMACSHA256(A,A对应的秘钥);
得到Sign签名后即可正常发起请求
示例代码
import hmac
import hashlib
import common.sdkapi_sign
import json
import re
def com_sign(request, Appkey=None, data=None, body=None):
"""
使用直接调用这个函数即可
:param request:请求方式(get、post)
:param Appkey: 签名key
:param data: 请求参数
:param body: 请求体
"""
if request == 'get':
sign = common.sdkapi_sign.Sign.signs(Appkey, common.sdkapi_sign.Sign.ascii(data))
# 生成的签名添加到加入请求参数
elif request == 'post':
# 将body字典对象转为字符串并且替换为双引号
body_json = json.dumps(body).replace("'", '"')
# 去除空格
body_json = re.sub(r"\s", "", body_json)
# print(body_json)
data['body'] = body_json
# 根据入参生成签名
sign = common.sdkapi_sign.Sign.signs(Appkey, common.sdkapi_sign.Sign.ascii(data))
else:
print("请求方式不正确")
sign = None
return sign
class Sign:
# 标记静态方法
@staticmethod
# 将请求参数排序生成字符串
def ascii(data):
# 转化为小写参数名
params = {k.lower(): v for k, v in data.items()}
# 按照ASCII码顺序排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# print('排序后--%s' % sorted_params)
# 拼接参数成字符串
params_str = "&".join(["{}={}".format(k, v) for k, v in sorted_params])
# print('拼接字符串--%s' % params_str)
return params_str
# 标记静态方法
@staticmethod
# 根据appkey加密生成sign
def signs(appkey, strToSign):
# hmac_sha256加密入参
s = hmac.new(bytes(appkey, encoding='utf-8'), bytes(strToSign, encoding='utf-8'),
digestmod=hashlib.sha256).hexdigest().lower()
# print('签名--%s' % s)
return s
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库