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实现2014火车票查询代码分享
Jan 10 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
python中管道用法入门实例
Jun 04 Python
Python中的time模块与datetime模块用法总结
Jun 30 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
Python实现类的创建与使用方法示例
Jul 25 Python
python实现公司年会抽奖程序
Jan 22 Python
深入了解Python iter() 方法的用法
Jul 11 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
在notepad++中实现直接运行python代码
Dec 18 Python
如何通过Python3和ssl实现加密通信功能
May 09 Python
python用opencv 图像傅里叶变换
Jan 04 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
2013/09/10 Javascript
iframe父页面获取子页面参数的方法
2014/02/21 Javascript
关于foreach循环中遇到的问题小结
2017/05/08 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
如何实现iframe父子传参通信
2020/02/05 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
Python求解任意闭区间的所有素数
2018/06/10 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python中Numpy mat的使用详解
2019/05/24 Python
我就是这样学习Python中的列表
2019/06/02 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
如何给Python代码进行加密
2020/01/10 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
详解python的变量缓存机制
2021/01/24 Python
纯CSS3实现圆角效果(含IE兼容解决方法)
2014/05/07 HTML / CSS
德国足球商店:OUTFITTER
2019/05/06 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
道德模范先进事迹
2014/02/14 职场文书
跳蚤市场口号
2014/06/13 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
MySQL 执行数据库更新update操作的时候数据库卡死了
2022/05/02 MySQL
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python