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中用fork()函数生成的子进程
May 04 Python
Python随机生成信用卡卡号的实现方法
May 14 Python
Django的session中对于用户验证的支持
Jul 23 Python
python创建列表并给列表赋初始值的方法
Jul 28 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 Python
基于Python开发chrome插件的方法分析
Jul 07 Python
python获取本机所有IP地址的方法
Dec 26 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 Python
10个示例带你掌握python中的元组
Nov 23 Python
python如何做代码性能分析
Apr 26 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数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
php变量作用域的深入解析
2013/06/03 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
php/JS实现的生成随机密码(验证码)功能示例
2019/06/06 PHP
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
jQuery实现复选框成对选择及对应取消的方法
2015/03/03 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
举例讲解如何判断JavaScript中对象的类型
2016/04/22 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
Vue 获取数组键名的方法
2018/06/21 Javascript
简单了解Vue + ElementUI后台管理模板
2020/04/07 Javascript
Vue单文件组件开发实现过程详解
2020/07/30 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
python命令行参数用法实例分析
2019/06/25 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
Linux文件操作命令都有哪些
2016/07/23 面试题
房务中心文员岗位职责
2014/04/16 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
领导班子奢靡之风查摆问题及整改措施
2014/09/27 职场文书
三峡人家导游词
2015/01/31 职场文书
总经理助理岗位职责
2015/01/31 职场文书
储备店长岗位职责
2015/04/14 职场文书
二审答辩状范文
2015/05/22 职场文书
教学副校长工作总结
2015/08/13 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
nginx配置限速限流基于内置模块
2022/05/02 Servers