PYTHON实现SIGN签名的过程解析
Python  /  管理员 发布于 7年前   273
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+appkeyprint(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 hashlibappkey = "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+appkeyprint(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)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号