PYTHON实现SIGN签名的过程解析
作者:圆觉 发布时间:2021-08-09 13:29:05
标签:python,sign,签名
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种方式打印出来的实际结果如下:
第二步:排序后的参数按照参数1值1,参数2值2的键值对顺序拼接成一个字符串,按参数名字母顺序升序排序。(具体升降顺序得问开发,一般为升序)
期望的结果如下:(按字母顺序:Password开头的在username前面)
“Password123456usernameTest”
代码实现:
# TODO 按字母升序排序
sort = "".join(sorted(list))
print(sort)
实际结果:
第三步:在前面得到的字符串后面,加上接入方验证密匙appkey。
期望结果:
Password123456usernameTest111222333
代码实现:
# todo 3:在第二步得到的字符串后面,加上接入方验证密匙key,然后计算md5值,
result = sort+appkey
print(result)
实际结果:
第四步:然后将这个字符串换为小写进行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)
实际结果:
全部过程如下:
'''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)
来源:https://www.cnblogs.com/xiamaojjie/p/11749968.html
0
投稿
猜你喜欢
- 随着互联网产业的飞速发展和电子产业的飞速发展,人们的社交似乎离不开网络,这就应运了SNS的飞速发展。从打开QQ空间关注朋友们的动态,最近心情
- python中最基本的数据类型如下:Number(数字)String(字符串)List(列表)Tuple(元组)Dictionary(字典)
- 注:以下文章原文来自于Dr Charles Severance 的 《Python for Informatics》11.3 组合查询和抽取
- 翻译:ShiningRay @ Nirvana Studio作者:Douglas Crockford来源:http://www.crockf
- 我们可以用Python来将一个网页保存为本地的HTML文件,这需要用到urllib库。比如我们要下载山东大学新闻网的一个页面,该网页如下:实
- 通常,在完成了一件网页设计后,设计师的无知都会显露无遗而备受指责。他们把创建网页代码的繁重工作都留给了程序员们。这种现象不只出现在网络开发行
- 我们有时候看到一篇好的文章,想去保存下来,传统方式一般是收藏书签、复制粘贴到文档或者直接复制链接保存,但这样一次两次还好,数量多了,比较麻烦
- 本次薯片会一改以往低调、沉稳之作风,先瑜伽团美女show上阵,再是以臭为首的吃喝团上阵,两轮下来大家情绪Hight到了极点,自然讨论的时候思
- WEB标准化之前的互联网是TABLE布局的天下,但随着互联网的高速发展,TABLE布局已经不能满足千变万化的页面所来来的更新压力和服务器压力
- 在默认的情况下,MySQL搜索不区分大小写(但某些字符集始终区分大小写,如czech)。这意味着,如果你使用col_name LIKE
- 一、数据库远程管理技术 对于中小型应用,比如一个网站的建设和维护,这种大型应用平台就显得有些尾大不掉,开销也过于庞大。曾经在互联网技术和Ja
- PHP getDocNamespaces() 函数实例返回 XML 文档的根节点中声明的命名空间:<?php $xml=<<
- 在最近一个项目中,表单验证需要对时间的起止范围进行判断:结束时间需大于或等于开始时间。即:结束年须大于起始年;如果相等,则比较起始月与结束月
- PHP获取当前url路径的函数及服务器变量:代码:<?php$path = /usr/opt/../ect/abcd;echo $_S
- 最近在研究深度学习视觉相关的东西,经常需要写python代码搭建深度学习模型。比如写CNN模型相关代码时,我们需要借助python图像库来读
- 1.用CSS实现布局让我们一起来做一个页面,首先,我们需要一个布局。请使用CSS控制3个div,实现如下图的布局。考察应试者的基本布局知识—
- 如下所示:# -*- coding: UTF-8 -*-import numpy as npimport osfrom scipy.misc
- ModuleNotFoundError: No module named ‘dlib'尝试命令,但没成功pip3 install d
- 前言在编程开发中,个人觉得,只要按照规范去做,很少会出问题。刚开始学习一门技术时,的确会遇到很多的坑。踩的坑多了,这是好事,会学到更多东西,
- 1、ul标签在Mozilla中默认是有padding值的,而在IE中只有margin有值。 2、同一个的class选择符可以在一个