接口测试加密解密以及接口签名sign原理
目录
一、什么是加密以及解密
二、加密方式分类
三、加密方式详解
1、加对称密技术:
2、非对称加密技术(RSA加密算法)
场景1:通过公钥加密,通过私钥解密
场景2:私钥加密:数字签名,公钥解密:验证签名
Fiddler不能直接抓取https协议的数据报文,需要安装一个数字证书
3、MD5(完全不考虑解密,也叫做哈希算法,散列算法)
四、接口签名
什么是接口签名?
为什么要做接口签名?
如何做接口签名,了解签名的规则:
postman实现并且封装成函数:JavaScript
一、什么是加密以及解密
加密:在网络上传输的原始数据(明文)经过加密后形成(密文)传输,防止被窃取。
解密:将加密还原成原始数据
二、加密方式分类
对称式加密:对加密和解密使用的是同一个密钥
非对称式加密:非对称式加密需要两个密钥(双钥),分别叫公钥和秘钥,这两把秘钥可以互相加解密,公钥公开的,不需要保密,私钥是保密的。
三、加密方式详解
1、加对称密技术:
DES加密算法:加密安全性弱,一般应用于旧的系统里面
AES加密算法:一般用于前后端分离的接口加密
Base64加密算法:编码的方式
在线JSON校验格式化工具(Be JSON)
2、非对称加密技术(RSA加密算法)
RSA加密算法:最有影响力的加密算法
场景1:通过公钥加密,通过私钥解密
两个用户。A和B,B有双钥,A想要把一个数据报文通过加密的方式传给B。
1、B把自己的公钥发送给A(公钥是公开的)
2、A使用这个公钥把数据报文进行加密,加密完成传给B(加密后的密文通过网络传给B)
3、B使用自己的秘钥解密得到数据报文
场景2:私钥加密:数字签名,公钥解密:验证签名
数字证书由来:因为公钥是公开的不安全,所以需要第三方的CA(数字证书颁发机构)对公钥进行加密,加密后的东西就叫数字证书。数字证书包括:B用户基本信息以及B公钥的信息,部分证书也附有有效期。X509的标准
CA:双钥,通过私钥加密
验证签名:身份验证。
两个用户。A和B,B有双钥
1、B把需要发送的数据报文通过私钥加密。
2、B找到CA把自己的公钥做认证
3、CA就用自己的私钥对B的公钥和一些相关的信息一起加密,生成数字证书
4、CA就会把数字证书发给B
5、B将密文和数字证书都传给A
6、A用CA的公钥去解开数字证书,拿到B的公钥,在使用公钥解密密文,从而得到数据报文
Fiddler不能直接抓取https协议的数据报文,需要安装一个数字证书
https协议=http协议+SSL安全传输协议
SSL安全传输协议:安全套接层。NetScape(B)研发,Fiddler(A),CA把数字证书发到网上,数字证书生成器。
3、MD5(完全不考虑解密,也叫做哈希算法,散列算法)
Postman举例:在Tests中
//获得当前时间戳
new times = new Date().getTime()
//使用MD5加密
var miwen = CryptoJS.MD5("admin").toString().toUpperCase()
Jmeter
函数助手:__digest
${__digest(MD5.admin,,,)}
四、接口签名
什么是接口签名?
使用用户名,密码,时间戳和所有的排序过的参数组合起来,再加密得到的字符串,字符串是唯一的有权访问第三方金融接口的鉴权码=sign接口签名。
为什么要做接口签名?
1、防伪装攻击
2、防篡改攻击
3、防存放攻击
4、防数据泄漏
如何做接口签名,了解签名的规则:
1、对所有的请求的参数按key按ASCII码做升序排列。
{"c":"3","b":"2","a":"1"}
{"1":"1","b":"2","c":"3"}
2把参数名和参数值连接成字符串:
a=1&b=2&c=3
3、用申请到的appid和appsecret连接到字符串的头部
appid:用户名
appsecret:密码
appid=admin&appsecret=123&a=1&b=2&c=3
4、用时间戳连接字符串的尾部
appid=admin&appsecret=123&a=1&b=2&c=3×tamp=124124252
5、然后再把这个字符串安装32位的MD5加密,加密后再转换成大写。
sign=E48B34F95AE8001C99CB86A612538C04
10秒有效。
jmeter实现并且分装成函数的话:自定义函数 jave python
postman实现并且封装成函数:JavaScript
Pre-request-Script
//url=https://aaa/sss?com=aaa&nu=hhh&phone=jjjjj&show_appid=jj&showapi_timestamp={{time}}&showapi_sign={{sign}}var moment = require('moment')//获取时间戳
console.log(request.url);//获取请求信息var url = request.url;var param = url.split("?")[1]//取到url的?后面的值,按照?分割,取前面就是0if(param != null){var time = moment().format("YYYYMMDDHHmmss")//取当天时间按照YYYYMMDDHHmmss形式显示pm.environment.set("time",time);//postman 自带的 全局变量param+="&showapi_timestamp="+time;param+="&showapi_sign=122344556";var param = param.split("&") ;//分割变成一个listparam.sort();//按照要求的方式进行排序a-zvar keys = new Array(param.length);var values = new Array(param.length);for(var i=0;i<param.length;i++){keys[i]=param[i].split("=")[0]//取=前面的值values[i]=param[i].split("=")[1]//取=后面的值}var str=[]for(var p=0;p<keys.length;p++)//如果发现keys需要sign,就不参与验签{if (keys[p]=="showapi_sign"||values[p]=="{{time}}"){continue;}str.push(keys[p]+value[p]);}var sign = str.join("")sign = sign+"sssss";//加密钥pm.environment.set("sign",CryptoJs.MD5(sign).toString());//postman 自带的全局变量}
接口测试加密解密以及接口签名sign原理相关推荐
- 软件测试 接口测试 接口鉴权 token鉴权 Mock Server 接口加解密 接口签名sign
文章目录 1 接口鉴权 1.1 cookie鉴权 1.2 session鉴权 1.3 token鉴权 1.4 Postman的鉴权方式 2 Mock Server 3 接口加解密 3.1 加密方式 3 ...
- PHP RSA2加密和解密以及接口签名和验签
开发中吗我们经常要与接口打交道,无论是调取别人的接口还是给别人提供接口,如何保障在接口调用时双方数据的安全性和一致性,,这里就涉及到数据加密以及签名验证服务.本文以PHP示例讲解RSA2数据加解密和签 ...
- openssl 非对称加密 RSA 加密解密以及签名验证签名
1. 简介 openssl rsa.h 提供了密码学中公钥加密体系的一些接口, 本文主要讨论利用rsa.h接口开发以下功能 公钥私钥的生成 公钥加密,私钥解密 私钥加密,公钥解密 签名:私钥签名 验 ...
- JAVA 接口签名sign生成 工具类
import org.springframework.util.StringUtils;import java.util.Map; import java.util.Random; import ja ...
- RSA密钥生成、加密解密、数据签名验签
公钥.私钥生成 准备工作,基础的帮助类 使用java代码生成公钥私钥 使用openssl生成公钥私钥 加解密 数据签名及验签 数据加解密及签名验签测试 注意项 公钥.私钥生成 准备工作,基础的帮助类 ...
- JAVA接口签名sign生成工具类
签名规则 1.线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret 2.加入timestamp(时间戳),10分钟内数据有效 3.加入流水号nonce(防止 ...
- js rsa验签_js rsa sign使用笔记(加密,解密,签名,验签)
你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...
- 叙述无保密机制的rsa签名过程_安全系列之——RSA的公钥私钥有多少人能分的清楚?RSA的签名验签与加密解密如何使用公私钥?...
在对接很多的互联网公司的开发平台时,这些互联网公司未来自身平台的安全,都会需要调用方签名确认调用方的身份是合法的,同时未来信息网络传输的安全可能还需要加密解密.比如对接支付宝.微信开放平台时,需要配置 ...
- java rsa 117_java实现RSA非对称加密解密
之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...
- python rsa加密解密_RSA加密解密(python版)
RSA的算法涉及三个参数,n.e.d. 其中,n是两个大质数p.q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度. e1和d是一对相关的值,e可以任意取,但要求e与(p-1)*(q-1)互质: ...
最新文章
- 【Xamarin挖墙脚系列:使用Xamarin进行Hybrid应用开发】
- 中石油训练赛 - 小说(最短路+二分)
- 【九章算法免费讲座第一期】转专业找CS工作的“打狗棒法”
- android记事本项目案例,Android实现记事本项目完整实例源代码
- php session作用,PHP中Session的作用
- 群晖消息通知 推送服务器,群晖resync服务器
- Esri官网购买个人版ArcGIS Pro激活方法
- 明解C语言第四章习题
- 炳辉中学2021高考成绩查询,天长中学 炳辉中学 天长二中 关塘中学2019年高考成绩喜报...
- 基于simulink的Active anti-islanding-AFD主动反孤岛模型仿真
- jsoncpp操作类
- JAVA NIO:NIO与OIO的对比以及Channel通道、Selector选择器、Buffer缓冲区的介绍 高并发
- 传感器连接mysql_获取传感器数据并传入数据库-HTTP/POST/ASP.NET
- 高等数学-线性代数:特征向量与差分方程的连接
- 作为程序员的你,这10款在线编辑器,你用过哪一个?
- 下一代降维打击黑科技现身中国
- window.opener用法(在子窗体中获得父窗体的方法)
- Mybatis框架创建逆向工程步骤
- 大文件传输利器HFS的配置及简单使用
- Ruby on Rails 实践:优化rvm安装、下载速度