柠檬班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 完成验签操作的更多相关文章

  1. python md5验签

    import hashlib #api验签 参数按首字母排序,然后拼接clientid=123456&num=xxxx&status=1&timestamp=157319776 ...

  2. RSA - 原理、特点(加解密及签名验签)及公钥和私钥的生成

    Wiki - RSA加密演算法 Wiki - 欧拉函数 Wiki - 模反元素 ASN.1 格式标准 RSA算法原理(二) 注意: RSA 加密或签名后的结果是不可读的二进制,使用时经常会转为 BAS ...

  3. RSA体系 c++/java相互进行加签验签--转

    在web开发中,采用RSA公钥密钥体系自制ukey,文件证书登陆时,普遍的做法为:在浏览器端采用c++ activex控件,使用 c++的第三库openssl进行RAS加签操作,在服务器端采用java ...

  4. java安全入门篇之接口验签

    文章大纲 一.加密与验签介绍二.接口验签实操三.项目源码下载   一.加密与验签介绍   大多数公共网络是不安全的,一切基于HTTP协议的请求/响应(Request or Response)都是可以被 ...

  5. Java Http接口加签、验签操作方法

    1.业务背景 最近接触了一些电商业务,发现在处理电商业务接口时,比如淘宝.支付类接口,接口双方为了确保数据参数在传输过程中未经过篡改,都需要对接口数据进行加签,然后在接口服务器端对接口参数进行验签,确 ...

  6. Python rsa公私钥生成 rsa公钥加解密(分段加解密)-私钥加签验签实战

    一般现在的SAAS服务提供现在的sdk或api对接服务都涉及到一个身份验证和数据加密的问题.一般现在普遍的做法就是配置使用非对称加密的方式来解决这个问题,你持有SAAS公司的公钥,SAAS公司持有你的 ...

  7. 利用SHA-1算法和RSA秘钥进行签名验签(带注释)

    背景介绍 1.SHA 安全散列算法SHA (Secure Hash Algorithm)是美国国家标准和技术局发布的国家标准FIPS PUB 180-1,一般称为SHA-1.其对长度不超过264二进制 ...

  8. Python 利用Python操作excel表格之openyxl介绍Part2

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart()    ...

  9. Python 利用Python操作excel表格之openyxl介绍Part1

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436),免费获取以下性能监控工具(类似Nmon精简版) ...

随机推荐

  1. ansible系列7-mysql_user模块

    添加mysql的用户和权限.密码 新增mysql用户zhang,设置登录密码zhang,给予权限zabbix.*:ALL ansible dba -m mysql_user -a 'login_hos ...

  2. BZOJ2819Nim——树链剖分+线段树+Nim游戏

    题目描述 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...

  3. day11 reduce函数

    场景模拟: 序列元素在原有基础上加1 常规方法 简单但扩展性查 num1 = [1,2,3,4,5,6,7,8,9,100] res = 0 for i in num1: res += i print ...

  4. Markdown公式编辑学习笔记

    一.公式使用参考 1.如何插入公式 行中公式(放在文中与其它文字混编)可以用如下方法表示:$ 数学公式 $ 独立公式可以用如下方法表示:$$ 数学公式 $$ 自动编号的公式可以用如下方法表示: 若需要 ...

  5. hdu3072 Intelligence System (最小树形图?)

    题意:给一个有向图,问要从0号点能到达所有点所需要经过路径的最小权值和是多少,然而,若两点强联通,则这两点互相到达不需要花费.保证0号点能到达所有点 tarjan缩点以后直接取每个点入边中花费最小的即 ...

  6. 文件拷贝, 使用 BIO,NIO的对比,四种写法性能分析。

    测试环境: jdk 1.7 +  2G内存 测试代码基本上复制了: http://blog.csdn.net/tabactivity/article/details/9317143 1 2 3 4 5 ...

  7. Android: 待机时如何让程序继续运行 extends Service

    接触Android没几天,不太了解. 本来写好的一个应用在无意中发现,待机的时候,应用中的一个线程停止了运行. 这个线程是每隔一分钟上传一个数据到服务器上. 我当时测试的时候,没想过待机(接开关键)下 ...

  8. Python(四)——PyCharm的安装和使用

    python开发IDE: #专业版 #不要汉化 快捷键:Ctrl + ? = 整体注释

  9. apache加载模块的说明

    转: apache加载模块的说明 2017年04月11日 15:23:35 刚子狂想 阅读数:1432   LoadModule auth_basic_module modules/mod_auth_ ...

  10. vs2013配置opencv2.4.13

    此方法配置简单,方便易行,解压opencv2.4.13后得到opencv文件夹,进行如下步骤: 1.添加环境变量 用户变量,新建,变量名opencv,值D:\opencv\build 系统变量,Pat ...