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中PDB模块中的命令来调试Python代码的教程
Mar 30 Python
在Python中使用正则表达式的方法
Aug 13 Python
轻松实现python搭建微信公众平台
Feb 16 Python
python Selenium实现付费音乐批量下载的实现方法
Jan 24 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
利用python实现短信和电话提醒功能的例子
Aug 08 Python
Python配置文件处理的方法教程
Aug 29 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
Oct 12 Python
PyTorch学习:动态图和静态图的例子
Jan 06 Python
python判断链表是否有环的实例代码
Jan 31 Python
python实现发送QQ邮件(可加附件)
Dec 23 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 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简单静态页生成过程
2008/03/27 PHP
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
ajax更新数据后,jquery、jq失效问题
2011/03/16 Javascript
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
JQuery中的html()、text()、val()区别示例介绍
2014/09/01 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
利用JQuery操作iframe父页面、子页面的元素和方法汇总
2017/09/10 jQuery
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
深入理解基于vue-cli的webpack打包优化实践及探索
2019/10/14 Javascript
Node.js 中如何收集和解析命令行参数
2021/01/08 Javascript
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
python中partial()基础用法说明
2018/12/30 Python
Python简易版停车管理系统
2019/08/12 Python
python3中rank函数的用法
2019/11/27 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
python 日志 logging模块详细解析
2020/03/31 Python
浅谈sklearn中predict与predict_proba区别
2020/06/28 Python
Pycharm github配置实现过程图解
2020/10/13 Python
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
大学生自我鉴定
2013/12/16 职场文书
高一家长会邀请函
2014/01/12 职场文书
股东协议书
2014/04/14 职场文书
大学生社团活动总结
2014/04/26 职场文书
计算机专业毕业生求职信
2014/04/30 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
电子商务专业求职信范文
2015/03/19 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技