分享一下如何利用 Python测试 完成验签操作

一、什么是验签:

用非常简单的话来描述:有一个发送消息的端 A 有一个接收消息的端B ,以及A发给B的信息 msg,发送过程要进行签名(类似于对数据加密成一个sign) A对发送的msg进行加密签名,随请求发送一个sign B接收消息,要对sign进行验签,检测消息发送端以及来源是否安全与正确。注意:sign的生成跟发送的信息有关,且有专门的加密算法。

二、情景再现:

1)加密的算法如下所示(Python代码):

74be3eaeca2bd54a0bae3f2fdc84bb4b.png

2)请求的数据如下所示:

2fa6b920ab509c00d05cce23a80477e1.png

3)随请求发送的请求头如下(sign表示这里需要传递签名后的数据):

6ea61c61e6496aa5be22a04890234149.png

4)要求以及说明:

  • 请求传递的数据param以及利用md5Encode函数对参数进行加密生成的sign的字段顺序要一模一样

  • 难点在于:param是一个字典,无法保证它的顺序

  • 解题思路:对字典param进行排序,使之成为有序的字典形式

三、解决难题:

  • 先利用collections模块里面的OrderedDict来对字典完成排序 from collections import OrderedDict

4eb86783abbefe55dda98583546fdf39.png

利用md5Encode函数对param进行加密,但是md5Encode只能对字符串进行加密,所以要先利用json转成字符串。

691b069150d5b1d468cd6472f4d1f687.png

把sign替换到head这个数据里面去,发起请求

d723e8c4213aacb108fea02a1816479c.png

验签的操作就完成了!这个还是一种非常简单的验签,平常可能会需要添加时间戳等变动字段,但是解决方案是一样的!

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...