PYTHON实现SIGN签名的过程解析
sign签名是用于提供给外部(第三方)调用的接口,调用方需要提供正确的appkey钥匙才能调用,确保了接口的安全性。
签名参数sign生成方法:
假设有请求参数如下:
appkey = "111222333"
body = {
"username": "Test",
"Password": "123456",
"mail": "",
"sign": "xxx"
}
第一步:将所有参数(注意是所有参数),除去sign本身,以及值为空的参数,转化为键值对,没有等于号的字符串。
期望的结果如下:
["usernameTest","Password123456"]
代码实现2种方式:
1:for循环实现:
list = []
for i in body.items():
if i[1] != "" and i[0] != "sign":
list.append("".join(i))
print(list)
2:列表生成式实现:
s = ["".join(i) for i in body.items() if i[1] != "" and i[0] != "sign"] print(s)
2种方式打印出来的实际结果如下:

第二步:排序后的参数按照参数1值1,参数2值2的键值对顺序拼接成一个字符串,按参数名字母顺序升序排序。(具体升降顺序得问开发,一般为升序)
期望的结果如下:(按字母顺序:Password开头的在username前面)
“Password123456usernameTest”
代码实现:
# TODO 按字母升序排序 sort = "".join(sorted(list)) print(sort)
实际结果:

第三步:在前面得到的字符串后面,加上接入方验证密匙appkey。
期望结果:
Password123456usernameTest111222333
代码实现:
# todo 3:在第二步得到的字符串后面,加上接入方验证密匙key,然后计算md5值, result = sort+appkey print(result)
实际结果:

第四步:然后将这个字符串换为小写进行md5加密计算,得到的这个值即为sign签名值。
注意,计算md5之前请确保接口与接入方的字符串编码一致,如统一使用utf-8编码或者GBK编码,如果编码方式不一致则计算出来的签名会校验失败。
代码实现:
# todo MD5加密,固定的写法
def jiami(params):
m = hashlib.md5()
m.update(params.encode("utf-8"))
return m.hexdigest()
sign = jiami(result.lower()) #lower()把字符转为小写
print(sign)
实际结果:

全部过程如下:
'''sign签名主要是用于提供给外部(第三方)调用的接口,需要提供appkey钥匙才能调用'''
import hashlib
appkey = "111222333"
body = {
"username": "Test",
"Password": "123456",
"mail": "",
"sign": "xxx"
}
# todo 第1步: 将所有参数(注意是所有参数),除去sign本身,以及值是空的参数,转化为键值对的
#s = ["".join(i) for i in body.items() if i[1] != "" and i[0] != "sign"]
#print(s)
list = []
for i in body.items():
if i[1] != "" and i[0] != "sign":
list.append("".join(i))
print(list)
# todo 2:排序后的参数按照参数1值1,参数2值2的键值对顺序拼接成一个字符串,按参数名字母升序排序
# TODO 按字母升序排序
sort = "".join(sorted(list))
print(sort)
# todo 3:在第二步得到的字符串后面,加上接入方验证密匙key,然后计算md5值,
result = sort+appkey
print(result)
# todo MD5加密,固定的写法
def jiami(params):
m = hashlib.md5()
m.update(params.encode("utf-8"))
return m.hexdigest()
sign = jiami(result.lower()) #lower()把字符转为小写
print(sign)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
PyCharm2021最新激活码+激活码补丁(亲测最新版PyCharm2021.3激活成功)
这篇文章主要介绍了PyCharm2021最新激活码+激活码补丁,亲测最新版PyCharm2021.3激活成功,PyCharm2020激活成功2020-09-09
pandas combine_first函数处理两个数据集重叠和缺失
combine_first是pandas中的一个函数,它可以将两个DataFrame对象按照索引进行合并,用一个对象中的非空值填充另一个对象中的空值,这个函数非常适合处理两个数据集有部分重叠和缺失的情况,可以实现数据的补全和更新,本文介绍combine_first函数的语法及一些案例应用2024-01-01
pytorch 中pad函数toch.nn.functional.pad()的用法
今天小编就为大家分享一篇pytorch 中pad函数toch.nn.functional.pad()的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-01-01
python画图时设置分辨率和画布大小的实现(plt.figure())
这篇文章主要介绍了python画图时设置分辨率和画布大小的实现(plt.figure()),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-01-01
pytorch Variable与Tensor合并后 requires_grad()默认与修改方式
这篇文章主要介绍了pytorch Variable与Tensor合并后 requires_grad()默认与修改方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2021-05-05


最新评论