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中使用CasperJS获取JS渲染生成的HTML内容的教程
Apr 09 Python
在Django的上下文中设置变量的方法
Jul 20 Python
wxPython的安装图文教程(Windows)
Dec 28 Python
python修改list中所有元素类型的三种方法
Apr 09 Python
python pandas dataframe 按列或者按行合并的方法
Apr 12 Python
对pandas中to_dict的用法详解
Jun 05 Python
python实现时间o(1)的最小栈的实例代码
Jul 23 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
基于numpy中的expand_dims函数用法
Dec 18 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
pytorch中的 .view()函数的用法介绍
Mar 17 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输入流php://input使用示例(php发送图片流到服务器)
2013/12/25 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
2014/06/21 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
3个可以改善用户体验的AngularJS指令介绍
2015/06/18 Javascript
PHP结合jQuery实现的评论顶、踩功能
2015/07/22 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
Vue实现多标签选择器
2019/11/28 Javascript
[01:14:30]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第二场 8.20.mp4
2019/08/22 DOTA
tensorflow 打印内存中的变量方法
2018/07/30 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
python3实现微型的web服务器
2019/09/03 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
2021/03/02 Python
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
实习生自我评价
2014/01/18 职场文书
安康杯竞赛活动总结
2014/05/05 职场文书
工地安全生产标语
2014/06/06 职场文书
党员志愿者活动总结
2014/06/26 职场文书
商务经理岗位职责
2014/08/03 职场文书
母亲节寄语大全
2015/02/27 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
话题作文之成长
2019/12/09 职场文书