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基础教程之缩进介绍
Aug 29 Python
Python3.X 线程中信号量的使用方法示例
Jul 24 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
pycharm远程调试openstack代码
Nov 21 Python
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
python3.7.0的安装步骤
Aug 27 Python
python 画三维图像 曲面图和散点图的示例
Dec 29 Python
python实现AES加密与解密
Mar 28 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
python怎么提高计算速度
Jun 11 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抓取页面与代码解析 推荐
2010/07/23 PHP
php代码检查代理ip的有效性
2016/08/19 PHP
thinkPHP框架实现的无限回复评论功能示例
2018/06/09 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
jQuery使用each遍历循环的方法
2018/09/19 jQuery
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
使用JavaScript解析URL的方法示例
2019/03/01 Javascript
vue里如何主动销毁keep-alive缓存的组件
2019/03/21 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
vue实现购物车选择功能
2020/01/10 Javascript
Vue强制组件重新渲染的方法讨论
2020/02/03 Javascript
Vue实现购物车实例代码两则
2020/05/30 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
Python中使用PIL库实现图片高斯模糊实例
2015/02/08 Python
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
Python计算三维矢量幅度的方法
2015/06/15 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
对pandas中apply函数的用法详解
2018/04/10 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
Python urllib2运行过程原理解析
2020/06/04 Python
canvas进阶之如何画出平滑的曲线
2018/10/15 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
运动会口号大全
2014/06/07 职场文书
责任书格式范文
2014/07/28 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
小学教师自我评价
2015/03/04 职场文书
毕业生个人自荐书
2015/03/05 职场文书