PYTHON实现SIGN签名的过程解析


Posted in Python onOctober 28, 2019

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种方式打印出来的实际结果如下:

PYTHON实现SIGN签名的过程解析

第二步:排序后的参数按照参数1值1,参数2值2的键值对顺序拼接成一个字符串,按参数名字母顺序升序排序。(具体升降顺序得问开发,一般为升序)

期望的结果如下:(按字母顺序:Password开头的在username前面)

“Password123456usernameTest”

代码实现:

# TODO 按字母升序排序
sort = "".join(sorted(list))
print(sort)

实际结果:

PYTHON实现SIGN签名的过程解析

第三步:在前面得到的字符串后面,加上接入方验证密匙appkey。

期望结果:

Password123456usernameTest111222333

代码实现:

# todo 3:在第二步得到的字符串后面,加上接入方验证密匙key,然后计算md5值,
result = sort+appkey
print(result)

实际结果:

PYTHON实现SIGN签名的过程解析

第四步:然后将这个字符串换为小写进行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)

实际结果:

PYTHON实现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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中的一些类型转换函数小结
Feb 10 Python
Python记录详细调用堆栈日志的方法
May 05 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
Jun 06 Python
matplotlib savefig 保存图片大小的实例
May 24 Python
PyQt5 加载图片和文本文件的实例
Jun 14 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
Django分组聚合查询实例分享
Apr 29 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
Django migrate报错的解决方案
May 20 Python
TensorFlow的自动求导原理分析
May 26 Python
利用python调用摄像头的实例分析
Jun 07 Python
Python爬虫使用代理IP的实现
Oct 27 #Python
Python搭建代理IP池实现接口设置与整体调度
Oct 27 #Python
Python搭建代理IP池实现检测IP的方法
Oct 27 #Python
浅析使用Python搭建http服务器
Oct 27 #Python
Python搭建代理IP池实现存储IP的方法
Oct 27 #Python
Python搭建代理IP池实现获取IP的方法
Oct 27 #Python
详解python statistics模块及函数用法
Oct 27 #Python
You might like
PHP+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
php下统计用户在线时间的一种尝试
2010/08/26 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
分享PHP-pcntl 实现多进程代码
2016/09/30 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
javascript第一课
2007/02/27 Javascript
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
2013/01/10 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
原生js实现打字动画游戏
2017/02/04 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
微信小程序反编译的实现
2020/12/10 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
python 多线程实现检测服务器在线情况
2015/11/25 Python
Sanic框架Cookies操作示例
2018/07/17 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Python数据类型之列表和元组的方法实例详解
2019/07/08 Python
简单了解python PEP的一些知识
2019/07/13 Python
django xadmin中form_layout添加字段显示方式
2020/03/30 Python
jupyter 实现notebook中显示完整的行和列
2020/04/09 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
Python OpenCV去除字母后面的杂线操作
2020/07/05 Python
Django如何实现密码错误报错提醒
2020/09/04 Python
HTML5新增的8类INPUT输入类型介绍
2015/07/06 HTML / CSS
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
《美丽的田园》教学反思
2014/03/01 职场文书
残疾人小组计划书
2014/04/27 职场文书
个人自荐书怎么写
2015/03/26 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript
python基础之//、/与%的区别详解
2022/06/10 Python