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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
跟老齐学Python之一个免费的实验室
Sep 14 Python
Python文件去除注释的方法
May 25 Python
Python函数式编程指南(三):迭代器详解
Jun 24 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
Python操作MySQL数据库9个实用实例
Dec 11 Python
Python提取网页中超链接的方法
Sep 18 Python
python提取图像的名字*.jpg到txt文本的方法
May 10 Python
numpy中以文本的方式存储以及读取数据方法
Jun 04 Python
Python中文编码知识点
Feb 18 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
python线程信号量semaphore使用解析
Nov 30 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
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
PHP7正式版测试,性能惊艳!
2015/12/08 PHP
thinkphp3.x中变量的获取和过滤方法详解
2016/05/20 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
UserData用法总结 lanyu出品
2010/07/01 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
微信小程序商城项目之购物数量加减(3)
2017/04/17 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
vue图片加载失败时用默认图片替换的方法
2019/08/29 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
python3.5绘制随机漫步图
2018/08/27 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
基于Pytorch SSD模型分析
2020/02/18 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
css3针对移动端卡顿问题的解决(动画性能优化)
2020/02/14 HTML / CSS
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
晚宴邀请函范文
2014/01/15 职场文书
铲车司机岗位职责
2014/03/15 职场文书
环保建议书300字
2014/05/14 职场文书
客户答谢会致辞
2015/01/20 职场文书
初中数学教学反思范文
2016/02/17 职场文书
分享几种python 变量合并方法
2022/03/20 Python
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL