『居善地』接口测试 — 11、接口签名sign原理
1、什么是加密以及解密?
- 出于信息保密的目的,在信息传输或存储中,采用密码技术对需要保密的信息进行处理。使得处理后的信息不能被非受权者(含非法者)读懂或解读,这一过程称为加密。
- 在加密处理过程中,需要保密的信息称为“明文,经加密处理后的信息称为“密文”。加密即是将“明文”变为“密文”的过程。
- 与此类似,将“密文”变为“明文”的过程被称为解密。
2、加密方式的分类
(1)对称加密
- 对称加密是最快速、最简单的一种加密方式,加密(
encryption
)与解密(decryption
)用的是同样的密钥(secret key
)。 - 对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。
- 对称加密通常使用的是相对较小的密钥,一般小于256 bit。
因为密钥越大,加密越强,但加密与解密的过程越慢。
如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;
但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。
密钥的大小既要照顾到安全性,也要照顾到效率, - 对称加密的一大缺点是,密钥的管理与分配。
换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。
在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。
现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。 - 常见的对称加密算法有
DES
、3DES
、Blowfish
、RC4
、RC5
、RC6
和AES
。
(2)非对称加密
- 非对称加密为数据的解加密与密提供了一个非常安全的方法,它使用了一对密钥,公钥(
public key
)和私钥(private key
)。 - 私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。
- 非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。
比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人:银行,才能对你的消息解密。
与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。 - 虽然非对称加密很安全,但是和对称加密比起来,它非常的慢。所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
- 非对称加密的典型应用是数字签名。
- 常见的非对称加密算法有:
RSA
、ECC
(移动设备用)、Diffie-Hellman
、El Gamal
、DSA
(数字签名用)。
目前最常用的非对称加密算法是RSA
算法。
(3)总结:
对称加密:
- 定义:加密和解密使用的是同一个秘钥,例如:
AES
,MD5
。 - 特点:加密和解密效率高,安全性低。
非对称加密:
- 定义:加密使用的是公钥,解密使用私,例如:
RSA
。 - 特点:安全性高,加密解密效率低。
3、接口签名sign原理
(1)什么是接口签名?
是使用用户名
,密码
,时间戳
和所有的排过序之后的参数,拼接组合起来成为一个串,再把该串加密得到的字符串,这就是一个签名。
该签名字符串是唯一的有权访问第三方接口的鉴权码。
(2)为什么需要做接口签名
- 防伪装攻击。
- 防篡改攻击。
- 防重放攻击。
- 防数据泄露。
在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题。其中我认为最终要的还是数据是否被篡改。
(3)接口签名的实践方案
1)、明确请求身份
为开发者分配AccessKey
(开发者标识,确保唯一)和SecretKey
(用于接口加密,确保不易被穷举,生成算法不易被猜测)。
也有的人叫appid
和appsecret
,针对不同的调用方分配不同的appid
和appsecret
。
(一般16-32
位长,字母和数字组成,由开发提供。)
2)、生成signature(签名)
- 步骤1:对所有请求参数按key的
ASCII
码做升序排列。
例如:
{"c":"3","b":"2","a":"1"}
排序之后:
{"a":"1","b":"2","c":"3"}
- 步骤2:把请求参数拼接组合成串。
把所有排好序的请求参数,使用URL键值对的格式,即key1=value1&key2=value2…
的格式,拼接成字符串,设位sign_temp。 - 步骤3:把
AccessKey
和SecretKey
码加入上面拼接好的字符串。
可以灵活添加,可以把两个参数都加在字符串sign_temp前面。
也可以把两个参数都加在字符串sign_temp后面,或者一前一后。
例如:AccessKey=admin&SecretKey=123456&a=1&b=2&c=3
(这个规则都是开发定义好的。) - 步骤4:用时间戳连接到字符串的尾部。
例如:AccessKey=admin&SecretKey=123456&a=1&b=2&c=3×tamp=3424234....
- 步骤5:然后再把这个字符串进行MD5加密,加密后再转化成大写。
7CB6DFDCB3BAED652BF6A09D2ACDE34F
这串字符串就是signature(签名)
说明:
- 这里使用了MD5的算法进行签名,也可以自行选择其他签名方式,例如RSA,SHA等。
- 在请求中带上时间戳,并且把时间戳也作为签名的一部分,在接口提供方对时间戳进行验证,只允许一定时间范围内的请求,例如10分钟。
因为请求方和接口提供方的服务器可能存在一定的时间误差,建议时间戳误差在5分钟内比较合适。
允许的时间误差越大,链接的有效期就越长,请求唯一性的保证就越弱。所以需要在两者之间衡量。
3)、接口的请求参数
已登陆接口为例:
请求参数:
{
"username":"Jerry",
"password":"Test123456",
"signature":"7CB6DFDCB3BAED652BF6A09D2ACDE34F",
"timestamp":"时间戳 "
}
# 提示:
# signature和timestamp参数是提供实现接口加密,
# 但是不参与接口业务逻辑。
服务端收到请求的参数之后,接口会对signature进行解密和判断,是否符合请求标准。
符合标准之后就处理请求返回结果。
4)、编写测试用例
- 获得
AccessKey
和SecretKey
码。 - 通过算法获得signature(签名)。
- 把签名放入请求参数中。
- 剩余步骤与测试普通接口相同。
总结:
我们只要了解接口签名sign原理即可,关于实现代码,可以网上搜索,然后结合自己业务需求进行编码。
这里就不展示实际代码了。
『居善地』接口测试 — 11、接口签名sign原理的更多相关文章
- 『居善地』接口测试 — 12、Moco框架介绍
目录 1.Mock功能介绍 2.Moco框架介绍 3.Moco框架在接口测试中的作用 4.Moco框架的优点 5.Moco框架的下载与启动 (1)Moco框架的下载 (2)Moco框架的启动 1.Mo ...
- 『居善地』接口测试 — 4、Requests库发送GET请求
目录 1.使用Requests库发送带参数的GET请求 2.查看GET请求的内容 3.带请求头.参数的Get请求 Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求. ...
- 『居善地』接口测试 — 3、Requests库介绍
目录 1.Requests库 2.Requests库文档 3.Requests库安装 4.Requests库的使用 (1)使用步骤 (2)示例练习 5.补充:Json数据和Python对象互相转化 1 ...
- 『居善地』接口测试 — 5、使用Requests库发送POST请求
目录 1.请求正文是application/x-www-form-urlencoded 2.请求正文是raw (1)json格式文本(application/json) (2)xml格式文本(text ...
- 『居善地』接口测试 — 6、Httpbin服务介绍
目录 1.Httpbin服务介绍 2.在Windows系统中部署Httpbin服务 3.在Linux系统中部署Httpbin服务 4.Httpbin访问方式 5.Httpbin常用调试接口 6.总结: ...
- 『居善地』接口测试 — 13、Moco框架的使用
目录 1.Moco框架第一个练习 2.Get方法的Mock实现 3.Post方法的Mock实现 4.请求中加入Cookies 5.请求中加入Header 6.Moco模拟重定向 7.综合练习 8.总结 ...
- 『居善地』接口测试 — 7、Requests库使用proxies代理发送请求
目录 1.代理的了解 2.代理的分类 (1)正向代理 (2)反向代理 (3)总结 3.Requests库使用代理 4.总结 1.代理的了解 在上图中我们可以把Web server看成是Google服务 ...
- 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍
目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...
- 『政善治』Postman工具 — 13、Postman接口测试综合练习
目录 (一)项目接口文档 1.鉴权接口 2.注册接口 3.登录接口 4.用户信息接口 5.注销接口 (二)网站上手动验证 (三)Postman测试实现 1.准备工作 (1)创建一个Collection ...
随机推荐
- POJ3762 时间段用k次
题意: 有n个任务,每个任务有自己的开始时间和结束时间,还有完成这个任务能获得的价值,然后每一天的同一个时刻只能执行一个任务,每个任务必须连续执行完成,最多可以工作m天,问这m天能获得的最 ...
- Intel汇编程序设计-整数算术指令(下)
7.5 扩展加法和减法 扩展精度的假发和减法是指任意尺寸大小数字的加法和减法.例如要求你写一个C++程序,把两个1024位的整数相加,解决方案可不是那么简单!但在汇编语言中,ADC(带进位加)指令和 ...
- 【python】【补】Leetcode每日一题-合并两个有序数组
[python]Leetcode每日一题-合并两个有序数组 [题目描述] 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组 ...
- ES常用查询语法
1.query string search GET /index/type/_search?q=name:zhangsan&sort=age:desc 2.query DSL(Domain S ...
- Solon 的过滤器 Filter 和两种拦截器 Handler、 Interceptor
在web开发中,过滤器.拦截器是经常用到的功能.它可以帮我们限制流量.验证是否登陆.记录日志以及统计执行效率等等. 今天主要交流一下 Solon 框架中的过滤器和拦截器. Solon 是什么框架? S ...
- BUA软件工程个人博客作业
写在前面 项目 内容 所属课程 2020春季计算机学院软件工程(罗杰 任健) (北航) 作业要求 个人博客作业 课程目标 培养软件开发能力 本作业对实现目标的具体作用 阅读教材,了解软件工程,并比较各 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十四)——开发环境容器调试小技巧
之前有很多同学提到如何做容器调试,特别是k8s环境下的容器调试,今天就讲讲我是如何调试的.大家都知道在vs自带的创建项目模板里勾选docker即可通过F5启动docker容器调试.但是对于启动在k8s ...
- calico官网网络拓扑实现:基于eNSP与VMVare
Calico官网提供了两种网络设计模式: AS per rack: 每个rack(机架)组成一个AS,每个rack的TOR交换机与核心交换机组成一个AS AS per server: 每个node做为 ...
- CSS3中的过渡、动画和变换
一.过渡 过渡效果一般由浏览器直接改变元素的CSS属性实现. a.transition属性 transition 属性是一个简写属性,用于设置四个过渡属性: transition-property t ...
- Linux_网络进阶管理
一.链路聚合 1.什么是链路聚合? 网卡的链路聚合就是将多块网卡连接起来,当-块网卡损坏,网络依旧可以正常运行,可以有效的防止因为网卡损坏带来的损失,同时也可以提高网络访问速度. 2.链路聚合方式: ...