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之让人欢喜让人忧的迭代
Oct 02 Python
调试Python程序代码的几种方法总结
Apr 28 Python
python修改字典内key对应值的方法
Jul 11 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
Python3如何解决字符编码问题详解
Apr 23 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
Aug 30 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Python 点击指定位置验证码破解的实现代码
Sep 11 Python
Python 实现判断图片格式并转换,将转换的图像存到生成的文件夹中
Jan 13 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
用Python制作音乐海报
Jan 26 Python
一文搞懂如何实现Go 超时控制
Mar 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
PHP的FTP学习(二)[转自奥索]
2006/10/09 PHP
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
PHP闭包(Closure)使用详解
2013/05/02 PHP
PHP精确到毫秒秒杀倒计时实例详解
2019/03/14 PHP
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
js 异步处理进度条
2010/04/01 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
js单词形式的运算符
2014/05/06 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)
2016/02/16 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
js模糊查询实例分享
2016/12/26 Javascript
JS实现图片手风琴效果
2020/04/17 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
JavaScript如何处理移动端拍摄图片旋转问题
2019/11/16 Javascript
关于javascript中的promise的用法和注意事项(推荐)
2021/01/15 Javascript
python 合并文件的具体实例
2013/08/08 Python
讲解Python中的标识运算符
2015/05/14 Python
django实现登录时候输入密码错误5次锁定用户十分钟
2017/11/05 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
Django websocket原理及功能实现代码
2020/11/14 Python
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
生日主持词
2014/03/20 职场文书
小摄影师教学反思
2014/04/27 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
关于颐和园的导游词
2015/01/30 职场文书
北京爱情故事观后感
2015/06/12 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python