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 网络编程起步(Socket发送消息)
Sep 06 Python
python使用在线API查询IP对应的地理位置信息实例
Jun 01 Python
Python实现批量把SVG格式转成png、pdf格式的代码分享
Aug 21 Python
python中函数传参详解
Jul 03 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
用Python实现KNN分类算法
Dec 22 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
详解Python locals()的陷阱
Mar 26 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
Python通过m3u8文件下载合并ts视频的操作
Apr 16 Python
深入理解pytorch库的dockerfile
Jun 10 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
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
PHP中比较时间大小实例
2014/08/21 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
2014/09/01 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
微信小程序switch开关选择器使用详解
2018/01/31 Javascript
setTimeout时间设置为0详细解析
2018/03/13 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
python实现发送邮件功能代码
2017/12/14 Python
Python最小二乘法矩阵
2019/01/02 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
python 创建一维的0向量实例
2019/12/02 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
英国设计师泳装、沙滩装和比基尼在线精品店:Beach Cafe
2019/08/28 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
大学生就业自荐信
2013/10/26 职场文书
社区元宵节活动总结
2015/02/06 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
2019思想汇报范文
2019/05/21 职场文书
java解析XML详解
2021/07/09 Java/Android
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python