PYTHON实现SIGN签名的过程解析
作者:圆觉 时间:2021-08-09 13:29:05
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)
来源:https://www.cnblogs.com/xiamaojjie/p/11749968.html
标签:python,sign,签名
0
投稿
猜你喜欢
python实现人机对战的井字棋游戏
2023-02-11 15:37:45
详解用Node.js实现Restful风格webservice
2024-05-13 09:35:20
Java连接Mysql 8.0.18版本的方法详解
2024-01-24 10:08:29
MySQL8.0.21安装步骤及出现问题解决方案
2024-01-22 20:43:44
详解Python GUI工具取色器
2021-01-23 10:12:04
beam search及pytorch的实现方式
2023-08-02 10:29:30
sqlserver获取当前日期的最大时间值
2024-01-16 06:54:24
phpstudy无法启动MySQL服务的完美解决办法
2024-05-22 10:08:59
python链表的基础概念和基础用法详解
2021-02-26 07:13:50
FCKeditor编辑器基本配置优化修改使用方法
2008-12-31 13:32:00
python基础之while循环语句的使用
2021-03-16 16:54:20
Python使用Matplotlib实现雨点图动画效果的方法
2023-02-04 10:32:05
Jupyter Notebook 文件默认目录的查看以及更改步骤
2022-03-22 15:01:19
python写的一个squid访问日志分析的小程序
2021-08-02 14:09:09
javascript一些不错的函数脚本代码
2023-07-02 05:25:52
Mozilla 表达式 __noSuchMethod__
2024-04-18 09:42:21
解决python彩色螺旋线绘制引发的问题
2023-06-30 12:49:12
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2021-06-22 17:32:38
asp.net php asp jsp 301重定向的代码(集合)
2023-11-14 15:02:06
简单掌握Python的Collections模块中counter结构的用法
2023-05-17 00:20:13