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下的Mysql模块MySQLdb安装详解
Apr 09 Python
python实现udp数据报传输的方法
Sep 26 Python
python打开url并按指定块读取网页内容的方法
Apr 29 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
单链表反转python实现代码示例
Feb 08 Python
python 处理string到hex脚本的方法
Oct 26 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
python处理DICOM并计算三维模型体积
Feb 26 Python
Python笔试面试题小结
Sep 07 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
Python基于百度AI实现抓取表情包
Jun 27 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/01/22 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
如何使用PHP实现javascript的escape和unescape函数
2013/06/29 PHP
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
yii操作cookie实例简介
2014/07/09 PHP
php post大量数据时发现数据丢失问题解决方法
2015/06/20 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
实例讲解PHP页面静态化
2018/02/05 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
禁止你的左键复制实用技巧
2013/01/04 Javascript
Javascript遍历table中的元素示例代码
2014/07/08 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
nodejs中Express与Koa2对比分析
2018/02/06 NodeJs
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
js实现选项卡效果
2020/03/07 Javascript
Vue.js中Line第三方登录api的实现代码
2020/06/29 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
Python使用turtule画五角星的方法
2015/07/09 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
浅谈python3 构造函数和析构函数
2020/03/12 Python
Python3如何在服务器打印资产信息
2020/08/27 Python
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
优秀学生干部个人的自我评价
2013/10/04 职场文书
三好学生自我鉴定
2013/12/17 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
学校爱心捐款倡议书
2014/05/13 职场文书
学校运动会通讯稿
2015/07/18 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
Python编写nmap扫描工具
2021/07/21 Python