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压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
Python中文竖排显示的方法
Jul 28 Python
Python中str.format()详解
Mar 12 Python
python实现图像识别功能
Jan 29 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
python实现C4.5决策树算法
Aug 29 Python
Python生成rsa密钥对操作示例
Apr 26 Python
Python和Sublime整合过程图示
Dec 25 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
详解Django中views数据查询使用locals()函数进行优化
Aug 24 Python
python实现腾讯滑块验证码识别
Apr 27 Python
Python实现视频自动打码的示例代码
Apr 08 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 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
2016/01/04 PHP
javascript document.execCommand() 常用解析
2009/12/14 Javascript
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
jQuery数组处理代码详解(含实例演示)
2012/02/03 Javascript
js判断上传文件的类型和大小示例代码
2013/10/18 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
js函数在frame中的相互调用详解
2014/03/03 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
浅谈Javascript中的Function与Object
2015/01/26 Javascript
javascript日期格式化方法汇总
2015/10/04 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
Vue中$refs的用法详解
2018/06/24 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
js实现特别简单的钟表效果
2020/09/14 Javascript
python实现的文件夹清理程序分享
2014/11/22 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
详解Python的Django框架中的中间件
2015/07/24 Python
python for 循环获取index索引的方法
2019/02/01 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
python实现登录密码重置简易操作代码
2019/08/14 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
小学运动会班级口号
2014/06/09 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS