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中函数的参数
Apr 27 Python
python读取Excel实例详解
Aug 17 Python
Python多继承原理与用法示例
Aug 23 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
python2与python3的print及字符串格式化小结
Nov 30 Python
python实现逐个读取txt字符并修改
Dec 24 Python
Python基础之函数的定义与使用示例
Mar 23 Python
python异常触发及自定义异常类解析
Aug 06 Python
基于keras 模型、结构、权重保存的实现
Jan 24 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
Python selenium实现断言3种方法解析
Sep 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
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHP 二维数组和三维数组的过滤
2016/03/16 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
判断window.onload是否多次使用的方法
2014/09/21 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
python 字符串split的用法分享
2013/03/23 Python
简单介绍Python中的JSON模块
2015/04/08 Python
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
python编码最佳实践之总结
2016/02/14 Python
Python中int()函数的用法浅析
2017/10/17 Python
python面向对象入门教程之从代码复用开始(一)
2018/12/11 Python
Python 如何提高元组的可读性
2019/08/26 Python
Python Gitlab Api 使用方法
2019/08/28 Python
python中的itertools的使用详解
2020/01/13 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
巴西家用小家电购物网站:Polishop
2016/08/07 全球购物
暇步士官网:Hush Puppies
2016/09/22 全球购物
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
行政办公员自我评价分享
2013/12/14 职场文书
珍珠鸟教学反思
2014/02/01 职场文书
地球一小时倡议书
2014/04/15 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
学校交通安全责任书
2014/08/25 职场文书
综合办公室岗位职责
2015/04/11 职场文书
小兵张嘎观后感300字
2015/06/03 职场文书