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使用Image处理图片常用技巧分析
Jun 01 Python
用Python实现斐波那契(Fibonacci)函数
Mar 25 Python
深入理解Python变量与常量
Jun 02 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
用 Python 连接 MySQL 的几种方式详解
Apr 04 Python
python3使用smtplib实现发送邮件功能
May 22 Python
python 将print输出的内容保存到txt文件中
Jul 17 Python
Python解决走迷宫问题算法示例
Jul 27 Python
Pandas读取并修改excel的示例代码
Feb 17 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
Python Django框架介绍之模板标签及模板的继承
May 27 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操作xml入门之cdata区段
2015/01/23 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
php常用数组函数实例小结
2016/12/29 PHP
如何在PHP中使用数组
2020/06/09 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
vue2.0移除或更改的一些东西(移除index key)
2017/08/28 Javascript
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
微信小程序常用赋值方法小结
2019/04/30 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
netbeans7安装python插件的方法图解
2013/12/24 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
对python中url参数编码与解码的实例详解
2019/07/25 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
2014年上半年工作自我评价
2014/01/18 职场文书
2014年端午节演讲稿范文
2014/05/23 职场文书
2015年路政工作总结
2015/05/22 职场文书
红白喜事主持词
2015/07/06 职场文书
医院岗前培训心得体会
2016/01/08 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
2016年综治宣传月活动宣传标语口号
2016/03/16 职场文书
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
SQL实现LeetCode(175.联合两表)
2021/08/04 MySQL
mysql 索引合并的使用
2021/08/30 MySQL
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL