如何利用 Python 完成验签操作
柠檬班Python8期的佑佑以及Python7期的掠掠同学昨天都私下问华华老师如何利用Python完成验签的操作。 今天我们就以佑佑的例子来跟大家进行简单的说明以及操作!
一、什么是验签:
用非常简单的话来描述:有一个发送消息的端 A 有一个接收消息的端B ,以及A发给B的信息 msg,发送过程要进行签名(类似于对数据加密成一个sign)
A对发送的msg进行加密签名,随请求发送一个sign
B接收消息,要对sign进行验签,检测消息发送端以及来源是否安全与正确。
注意:sign的生成跟发送的信息有关,且有专门的加密算法。
二、情景再现:
1)加密的算法如下所示(Python代码):
def md5Encode(param):
client_secret='F0897E16-5D1E-4A31-9644-BBF974E2DD88'#此为加密的秘钥
sign=param+client_secret
m = hashlib.md5(sign.encode(encoding='utf-8'))
return m.hexdigest().upper()
2)请求的数据如下所示:
param={"inputCodes":[""], "terminal":{"status":1,"channel":"D002",
"storeCode":"","passage":"D002","storeName":"柠檬班Python全栈自动化","identity":"","maxProductCount":5,"posId":"D002"}}
3)随请求发送的请求头如下(sign表示这里需要传递签名后的数据):
header={"client_id":"DataSync","sign":"D74259421E46D25C9E81CF991B7075DB","Content-Type":"application/json;charset=UTF-8"}
4)要求以及说明:
- 请求传递的数据param以及利用md5Encode函数对参数进行加密生成的sign的字段顺序要一模一样
- 难点在于:param是一个字典,无法保证它的顺序
- 解题思路:对字典param进行排序,使之成为有序的字典形式
三、解决难题:
先利用collections模块里面的OrderedDict来对字典完成排序 from collections import OrderedDict
param={"inputCodes":[""],
"terminal":{"status":1,"channel":"D002","storeCode":"",
"passage":"D002","storeName":"柠檬班Python全栈自动化","identity":"","maxProductCount":5,"posId":"D002"}}
dict_2=OrderedDict()
for item in param:
if type(item)==dict:
dict_sub=OrderedDict()
for key in item:
dict_sub[key]=item[key]
dict_2[item]=dict_sub
else:
dict_2[item]=param[item]
#最后得到的dict_2就是排序过后的字典利用md5Encode函数对param进行加密,但是md5Encode只能对字符串进行加密,所以要先利用json转成字符串。
str_data=json.dumps(dict_2)
sign=md5Encode(str_data)
#得到的sign就是加密后的签名
- 把sign替换到head这个数据里面去,发起请求
header={"client_id":"DataSync","sign":sign,"Content-Type":"application/json;charset=UTF-8"}
res=requests.post(url,json=dict_2,headers=header,verify=False)
print(res.json())
最后完成的请求如下所示:

验签的操作就完成了!这个还是一种非常简单的验签,平常可能会需要添加时间戳等变动字段,但是解决方案是一样的!
如何利用 Python 完成验签操作的更多相关文章
- python md5验签
import hashlib #api验签 参数按首字母排序,然后拼接clientid=123456&num=xxxx&status=1×tamp=157319776 ...
- RSA - 原理、特点(加解密及签名验签)及公钥和私钥的生成
Wiki - RSA加密演算法 Wiki - 欧拉函数 Wiki - 模反元素 ASN.1 格式标准 RSA算法原理(二) 注意: RSA 加密或签名后的结果是不可读的二进制,使用时经常会转为 BAS ...
- RSA体系 c++/java相互进行加签验签--转
在web开发中,采用RSA公钥密钥体系自制ukey,文件证书登陆时,普遍的做法为:在浏览器端采用c++ activex控件,使用 c++的第三库openssl进行RAS加签操作,在服务器端采用java ...
- java安全入门篇之接口验签
文章大纲 一.加密与验签介绍二.接口验签实操三.项目源码下载 一.加密与验签介绍 大多数公共网络是不安全的,一切基于HTTP协议的请求/响应(Request or Response)都是可以被 ...
- Java Http接口加签、验签操作方法
1.业务背景 最近接触了一些电商业务,发现在处理电商业务接口时,比如淘宝.支付类接口,接口双方为了确保数据参数在传输过程中未经过篡改,都需要对接口数据进行加签,然后在接口服务器端对接口参数进行验签,确 ...
- Python rsa公私钥生成 rsa公钥加解密(分段加解密)-私钥加签验签实战
一般现在的SAAS服务提供现在的sdk或api对接服务都涉及到一个身份验证和数据加密的问题.一般现在普遍的做法就是配置使用非对称加密的方式来解决这个问题,你持有SAAS公司的公钥,SAAS公司持有你的 ...
- 利用SHA-1算法和RSA秘钥进行签名验签(带注释)
背景介绍 1.SHA 安全散列算法SHA (Secure Hash Algorithm)是美国国家标准和技术局发布的国家标准FIPS PUB 180-1,一般称为SHA-1.其对长度不超过264二进制 ...
- Python 利用Python操作excel表格之openyxl介绍Part2
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart() ...
- Python 利用Python操作excel表格之openyxl介绍Part1
利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...
随机推荐
- BZOJ5249 九省联考2018IIIDX(线段树+贪心)
显然这形成了一个树形结构.考虑这样一种贪心:按照曲目顺序,每次取消其父亲的预留,并选择当前可选择(保证其子树有合法选择且满足预留)的最大值,然后对其子树预留出大于等于他的一些值.这个做法显然是正确的. ...
- 【转】linux环境内存分配原理 malloc info
Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...
- 自学Linux Shell5.2-shell内建命令history alias
点击返回 自学Linux命令行与Shell脚本之路 5.2-shell内建命令history alias 外部命令:有时称为文件系统命令,是存在于bash shell之外的程序,通常位于/bin./u ...
- 【BZOJ1800】[AHOI2009]飞行棋(暴力)
[BZOJ1800][AHOI2009]飞行棋(暴力) 题面 BZOJ 洛谷 题解 预处理一下前缀和就可以\(O(1)\)计算两点间的距离了,直接\(O(n^4)\)暴力枚举即可. #include& ...
- 洛谷 P2764 最小路径覆盖问题 解题报告
P2764 最小路径覆盖问题 问题描述: 给定有向图\(G=(V,E)\).设\(P\) 是\(G\) 的一个简单路(顶点不相交)的集合.如果\(V\) 中每个顶点恰好在\(P\) 的一条路上,则称\ ...
- bracketed-paste-magic:zle:41: not enough arguments for -U
原因是zsh的插件出问题了,解法方法如下: 把 ~/.oh-my-zsh/lib/misc.zsh 文件中的第一段 if 注释掉 OK 啦 # ]]; then # for d in $fpath; ...
- Adobe Premiere Pro CC ------ 快捷键
ctrl + ~:全屏 Esc:退出全屏
- Linux系统下yum镜像源环境部署记录
之前介绍了Linux环境下本地yum源配置方法,不过这个是最简单最基础的配置,在yum安装的时候可能有些软件包不够齐全,下面说下完整yun镜像源系统环境部署记录(yum源更新脚本下载地址:https: ...
- SSD详解
This results in a significant improvement in speed for high-accuracy detection(59 FPS with mAP 74.3% ...
- #线程池pool 【参考】
参考链接 http://www.open-open.com/lib/view/open1415453575730.html 参考配置 http://www.cnblogs.com/linjiqin/a ...