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之web模板应用
Dec 26 Python
Python 错误和异常代码详解
Jan 29 Python
TensorFlow变量管理详解
Mar 10 Python
浅谈Python traceback的优雅处理
Aug 31 Python
python爬取微信公众号文章的方法
Feb 26 Python
Django框架实现分页显示内容的方法详解
May 10 Python
Python OpenCV中的resize()函数的使用
Jun 20 Python
python logging模块的使用总结
Jul 09 Python
TensorFLow 不同大小图片的TFrecords存取实例
Jan 20 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
pytorch __init__、forward与__call__的用法小结
Feb 27 Python
Python+Pillow+Pytesseract实现验证码识别
May 11 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 pack与unpack 摸板字符字符含义
2009/10/29 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
php的闭包(Closure)匿名函数初探
2016/02/14 PHP
thinkphp下MySQL数据库读写分离代码剖析
2017/04/18 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
一个可绑定数据源的jQuery数据表格插件
2010/07/17 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
登陆成功后自动计算秒数执行跳转
2014/01/23 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
微信开发 JS-SDK 6.0.2 经常遇到问题总结
2016/12/08 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
浅析为什么a="abc" 不等于 a=new String("abc")
2017/10/25 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
Python数组并集交集补集代码实例
2020/02/18 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
商得四方公司面试题(gid+)
2014/04/30 面试题
什么是makefile? 如何编写makefile?
2013/01/02 面试题
素质拓展感言
2014/01/29 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
售后服务承诺函格式
2015/01/21 职场文书
导游词开场白
2015/01/31 职场文书
综合素质评价自我评价
2015/03/06 职场文书
2015年基层党建工作汇报材料
2015/06/25 职场文书
Java异常处理try catch的基本用法
2021/12/06 Java/Android
Python OpenGL基本配置方式
2022/05/20 Python
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript