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装饰器使用方法实例
Nov 21 Python
python动态监控日志内容的示例
Feb 16 Python
12步教你理解Python装饰器
Feb 25 Python
Python的numpy库中将矩阵转换为列表等函数的方法
Apr 04 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
python进程和线程用法知识点总结
May 28 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
python序列类型种类详解
Feb 26 Python
Python类的继承super相关原理解析
Oct 22 Python
详解Python牛顿插值法
May 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
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
2014/08/22 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
Jquery-1.9.1源码分析系列(十一)之DOM操作
2015/11/25 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
AngularJS轻松实现双击排序的功能
2016/08/30 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
适用于手机端的jQuery图片滑块动画
2016/12/09 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
Vuejs中使用markdown服务器端渲染的示例
2017/11/22 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
微信小程序实现日历签到
2020/09/21 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
python利用7z批量解压rar的实现
2019/08/07 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
css3+伪元素实现鼠标移入时下划线向两边展开的效果
2017/04/25 HTML / CSS
美国宠物护理专家:Revival Animal Health
2020/01/05 全球购物
大专毕业生简历的自我评价
2013/10/20 职场文书
应届大学生的推荐信
2013/11/20 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
物理力学求职信
2014/02/18 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
2015年度团总支工作总结
2015/04/23 职场文书
退税申请报告怎么写
2015/05/18 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android