1、什么是加密以及解密?

  • 出于信息保密的目的,在信息传输或存储中,采用密码技术对需要保密的信息进行处理。使得处理后的信息不能被非受权者(含非法者)读懂或解读,这一过程称为加密。
  • 在加密处理过程中,需要保密的信息称为“明文,经加密处理后的信息称为“密文”。加密即是将“明文”变为“密文”的过程。
  • 与此类似,将“密文”变为“明文”的过程被称为解密。

2、加密方式的分类

(1)对称加密

  • 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。
  • 对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。
  • 对称加密通常使用的是相对较小的密钥,一般小于256 bit。

    因为密钥越大,加密越强,但加密与解密的过程越慢。

    如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;

    但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。

    密钥的大小既要照顾到安全性,也要照顾到效率,
  • 对称加密的一大缺点是,密钥的管理与分配。

    换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。

    在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。

    现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。
  • 常见的对称加密算法有DES3DESBlowfishRC4RC5RC6AES

(2)非对称加密

  • 非对称加密为数据的解加密与密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。
  • 私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。
  • 非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。

    比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人:银行,才能对你的消息解密。

    与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。
  • 虽然非对称加密很安全,但是和对称加密比起来,它非常的慢。所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。
  • 非对称加密的典型应用是数字签名。
  • 常见的非对称加密算法有:RSAECC(移动设备用)、Diffie-HellmanEl GamalDSA(数字签名用)。

    目前最常用的非对称加密算法是RSA算法。

(3)总结:

对称加密:

  • 定义:加密和解密使用的是同一个秘钥,例如:AESMD5
  • 特点:加密和解密效率高,安全性低。

非对称加密:

  • 定义:加密使用的是公钥,解密使用私,例如:RSA
  • 特点:安全性高,加密解密效率低。

3、接口签名sign原理

(1)什么是接口签名?

是使用用户名密码时间戳和所有的排过序之后的参数,拼接组合起来成为一个串,再把该串加密得到的字符串,这就是一个签名。

该签名字符串是唯一的有权访问第三方接口的鉴权码。

(2)为什么需要做接口签名

  1. 防伪装攻击。
  2. 防篡改攻击。
  3. 防重放攻击。
  4. 防数据泄露。

在为第三方系统提供接口的时候,肯定要考虑接口数据的安全问题,比如数据是否被篡改,数据是否已经过时,数据是否可以重复提交等问题。其中我认为最终要的还是数据是否被篡改。

(3)接口签名的实践方案

1)、明确请求身份

为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(用于接口加密,确保不易被穷举,生成算法不易被猜测)。

也有的人叫appidappsecret,针对不同的调用方分配不同的appidappsecret

(一般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:把AccessKeySecretKey码加入上面拼接好的字符串。

    可以灵活添加,可以把两个参数都加在字符串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&timestamp=3424234....
  • 步骤5:然后再把这个字符串进行MD5加密,加密后再转化成大写。

    7CB6DFDCB3BAED652BF6A09D2ACDE34F

    这串字符串就是signature(签名)

说明:

  • 这里使用了MD5的算法进行签名,也可以自行选择其他签名方式,例如RSA,SHA等。
  • 在请求中带上时间戳,并且把时间戳也作为签名的一部分,在接口提供方对时间戳进行验证,只允许一定时间范围内的请求,例如10分钟。

    因为请求方和接口提供方的服务器可能存在一定的时间误差,建议时间戳误差在5分钟内比较合适。

    允许的时间误差越大,链接的有效期就越长,请求唯一性的保证就越弱。所以需要在两者之间衡量。

3)、接口的请求参数

已登陆接口为例:

请求参数:
{
"username":"Jerry",
"password":"Test123456",
"signature":"7CB6DFDCB3BAED652BF6A09D2ACDE34F",
"timestamp":"时间戳 "
} # 提示:
# signature和timestamp参数是提供实现接口加密,
# 但是不参与接口业务逻辑。

服务端收到请求的参数之后,接口会对signature进行解密和判断,是否符合请求标准。

符合标准之后就处理请求返回结果。

4)、编写测试用例

  1. 获得AccessKeySecretKey码。
  2. 通过算法获得signature(签名)。
  3. 把签名放入请求参数中。
  4. 剩余步骤与测试普通接口相同。

总结:

我们只要了解接口签名sign原理即可,关于实现代码,可以网上搜索,然后结合自己业务需求进行编码。

这里就不展示实际代码了。

『居善地』接口测试 — 11、接口签名sign原理的更多相关文章

  1. 『居善地』接口测试 — 12、Moco框架介绍

    目录 1.Mock功能介绍 2.Moco框架介绍 3.Moco框架在接口测试中的作用 4.Moco框架的优点 5.Moco框架的下载与启动 (1)Moco框架的下载 (2)Moco框架的启动 1.Mo ...

  2. 『居善地』接口测试 — 4、Requests库发送GET请求

    目录 1.使用Requests库发送带参数的GET请求 2.查看GET请求的内容 3.带请求头.参数的Get请求 Requests库GET请求是使用HTTP协议中的GET请求方式对目标网站发起请求. ...

  3. 『居善地』接口测试 — 3、Requests库介绍

    目录 1.Requests库 2.Requests库文档 3.Requests库安装 4.Requests库的使用 (1)使用步骤 (2)示例练习 5.补充:Json数据和Python对象互相转化 1 ...

  4. 『居善地』接口测试 — 5、使用Requests库发送POST请求

    目录 1.请求正文是application/x-www-form-urlencoded 2.请求正文是raw (1)json格式文本(application/json) (2)xml格式文本(text ...

  5. 『居善地』接口测试 — 6、Httpbin服务介绍

    目录 1.Httpbin服务介绍 2.在Windows系统中部署Httpbin服务 3.在Linux系统中部署Httpbin服务 4.Httpbin访问方式 5.Httpbin常用调试接口 6.总结: ...

  6. 『居善地』接口测试 — 13、Moco框架的使用

    目录 1.Moco框架第一个练习 2.Get方法的Mock实现 3.Post方法的Mock实现 4.请求中加入Cookies 5.请求中加入Header 6.Moco模拟重定向 7.综合练习 8.总结 ...

  7. 『居善地』接口测试 — 7、Requests库使用proxies代理发送请求

    目录 1.代理的了解 2.代理的分类 (1)正向代理 (2)反向代理 (3)总结 3.Requests库使用代理 4.总结 1.代理的了解 在上图中我们可以把Web server看成是Google服务 ...

  8. 『心善渊』Selenium3.0基础 — 24、Selenium的expected_conditions模块详细介绍

    目录 1.EC模块介绍 2.EC模块常用类 3.EC模块的使用 4.EC模块综合使用 (1)title_is(title)示例 (2)presence_of_element_located(locat ...

  9. 『政善治』Postman工具 — 13、Postman接口测试综合练习

    目录 (一)项目接口文档 1.鉴权接口 2.注册接口 3.登录接口 4.用户信息接口 5.注销接口 (二)网站上手动验证 (三)Postman测试实现 1.准备工作 (1)创建一个Collection ...

随机推荐

  1. CDH安装步骤

    Six Steps to CDH Installation There are many options and potential paths that make each CDH cluster ...

  2. 【近取 Key】Alpha - 项目展示

    项目与团队亮点 一.团队成员与分工简介 成员组成与分工 本团队由 6 名成员组成,其中有 3 名 PM,2 名后端开发人员与 4 名前端开发人员,由于组内成员数量有限,因此所有 PM 均需同时兼领开发 ...

  3. VS·卸载进程卡死"正在配置您的系统,这可能需要一些时间"

    阅文时长 | 0.34分钟 字数统计 | 596.8字符 主要内容 | 1.引言&背景 2.声明与参考资料 『VS·卸载进程卡死"正在配置您的系统,这可能需要一些时间"』 ...

  4. golang:指针理解总结

    指针的定义 指针是一个代表着某个内存地址的值.这个内存地址往往是在内存中存储的另一个变量的值的起始位置. go指针是提供操作数据的基本桥梁.因为go很多调用,往往复制一份对象,例如函数的参数,如果没有 ...

  5. [bug] Maven [WARNING] 'parent.relativePath' of POM

    参考 https://blog.csdn.net/simajinxiu/article/details/86667894

  6. 用JIRA管理你的项目——(一)JIRA环境搭建

    JIRA,大家应该都已经不陌生了! 最初接触这个工具的时候,我还在一味地单纯依靠SVN管理代码,幻想着SVN可以有个邮件通知,至少在项目成员进行代码修改的时候,我可以第一时间通过邮件获得这个消息! 当 ...

  7. curl -O http://www.linux.com/hello.sh

    2.3:可以使用curl的内置option:-O(大写)保存网页中的文件要注意这里后面的url要具体到某个文件,不然抓不下来 # curl -O http://www.linux.com/hello. ...

  8. Docker Swarm(六)Label 节点标签与服务约束

    前言 多节点 Swarm 集群下,可能节点的配置不同(比如 CPU.内存等),部署着不同类型的服务(比如 Web服务.Job服务等),当这些服务以 Service 或者 Stack 的形式部署到集群, ...

  9. 015.Python函数名的使用以及函数变量的操作

    一 函数名的使用 python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为值返回,叫第一类对象.其他语言功能有限 1.1 函数名是个特殊的变量,可以当做变量赋值 def func(): p ...

  10. mysql基础之数据库备份和恢复的基础知识

    备份数据的最终目的是为了在出现一些意外情况时,能够通过备份将数据还原,所以单单的备份数据往往是无法满足还原时的需求的,所以在备份数据库时,除了要备份数据本身,还要备份相关的数据库环境,如配置文件,定时 ...