全网最全之接口测试【加密解密攻防完整版】实战教程详解
看视频讲的更详细:https://www.bilibili.com/video/BV1zr4y1E7V5/?
一、对称加密
对称加密算法是共享密钥加密算法,在加密解密过程中,使用的密钥只有一个。发送和接收双方事先都知道加密的密钥,均使用这个密钥对数据进行加密和解密。
数据加密:在对称加密算法中,数据发送方将明文 (原始数据) 和 加密密钥一起经过加密处理,生成复杂的密文进行发送。
数据解密:数据接收方收到密文后,使用加密的密钥及相同算法的逆算法对加密的密文进行解密,将使其恢复成可读明文。
二、非对称加密
非对称加密算法,有两个密钥,一个称为公开密钥 (publickey),另一个称为 私有密钥 (private key),加密和解密使用的是两个不同的密钥,所以这种算法称为非对称加密算法。
如果使用公钥对数据进行加密,只有用对应的私钥才能进行解密。
如果使用私钥对数据进行加密,只有用对应的公钥才能进行解密。
三、常见加密处理方式
根据上述常见的加密算法,测试人员在测试不同的加密接口可采用下述的方法处理加密接口
摘要算法(MD5.SHA1 ):造接口数据前调用MD5,SHA1进行编码,服务端对比编码后的字符串是否一致
对称加密算法(AES,DES ):造接口数据前从开发获取对称公钥,基于对称公钥可以加密请求数据,解密响应报文
非对称加密算法(RSA):造接口数据前从开发获取公钥私钥去加密解密接口数据
用户认证:一般的接口测试工具都会提供一个User Auth/Authorization的选项
1、OAuth 2.0认证
在对应的工具上,你可以选取对应的用户认证选项,如果用Python如何实现用户认证。
- 首先安装Requests库,Requests库的get()和post()方法均提供有auth参数,用于设置用户签名。
- 假定我们有一个接口为添加一个新的公告,接口需要认证:auth=("username","password"),nid 或 name两个参数二选一
- 伪代码:
highlighter- ruby
def test_get_notice_list_nid_sucess(self):auth_user = ('admin' , 'admin123456')r = requests.get(self.base_url, auth = auth_user, params = {'nid' : 1})result = r.json()self.assertEqual(result['status'], 200)
2、数字签名
在使用 HTTP/SOAP 协议传输数据的时候,签名作为其中一个参数,可以起到关键作用:
先来一个简单的,通过客户的密钥,服务端的密钥匹配;
这个很有好理解,例如一个接口传参为:
highlighter- awk
http://127.0.0.1:8000/api/?a=1&b=2
假设签名的密钥为:@signpassword
加上签名之后的接口参数为:
highlighter- awk
http://127.0.0.1:8000/sign/?a=1&b=2&sign=@signpassword
但是,这样的sign 参数明文传输是不安全的,一般会选择一些加密算法,比如MD5 算法(MD5算法是不可逆向的),比如MD5代码如下:
highlighter- stylus
import hashlib
md5 = hashlib.md5()
sign_str = "@signpassword"
sign_bytes_utf8 = sign_str.encode()
md5.update(sign_bytes_utf8)
sign_md5 = md5.hexdigest()
print(sign_md5)
执行后得到:6648e929329e53e7a91c50ae685a88b5
此时带签名的接口为:
highlighter- apache
http://127.0.0.1:8000/sign/?a=1&b=2&sign=6648e929329e53e7a91c50ae685a88b5
所以,当服务器接收到请求后,同样需要对“signpassword”进行 MD5 加密,然后,比对与调用者传来的 sign 加密串是否一致,从而来鉴别调用者是否有权限使用该接口。
接着,我们来理解一个复杂一点的:把sign参数传递为api key(申请获取)+ timestramp(时间戳)同样需要用代码来实现,原理和上面这个一致的。(伪代码)
highlighter- ruby
def setUp(self): self.base_url = "http://127.0.0.1:8000/api/sec_add_notice/"# app_keyself.api_key = "&APIkey"# 当前时间now_time = time()self.client_time = str(now_time).split('.')[0]# signmd5 = hashlib.md5()sign_str = self.client_time + self.api_keysign_bytes_utf8 = sign_str.encode(encoding="utf-8")md5.update(sign_bytes_utf8)self.sign_md5 = md5.hexdigest()
3、AES加解密的过程
通常接口会使用更复杂一点的方式来进行加密的操作,常见的是AES的使用,放一张图让大家感受一下AES加解密的过程:
Python里面有一个很好的黑魔法,叫PyCrypto库,支持常见的 DES、AES 加密以及 MD5、SHA 各种 HASH 运算。
官方网站下载最新版本:
highlighter- awk
https://www.dlitz.net/software/pycrypto/
另外,也可以在 PyPi 仓库中下载安装:
highlighter- awk
https://pypi.python.org/pypi/pycrypto
对于AES的加密来说,看一下用了PyCrypto库的结果
加密:
highlighter- stylus
from Crypto.Cipher import AES
obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
message = "The answer is no"
ciphertext = obj.encrypt(message)
print(ciphertext)
程序运行后的结果为:
highlighter- taggerscript
b'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1'
AES加密里面有两个关键,一个是key(必须为16,24,32位),一个是VI(必须为16位)
解密:解谜者必须要同时知道key和VI才可以解密
highlighter- stylus
obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
s = obj2.decrypt(ciphertext)
print(s)
由Crypto库的作者已停止维护,现推荐安装:
highlighter- cmake
pip install pycrytodome
pycryptodome官方文档:
highlighter- awk
https://www.pycryptodome.org/en/latest/
写在最后
如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!
看到这篇文章的人有觉得我的理解有误的地方,也欢迎评论和探讨~
你也可以加入下方的的群聊去和同行大神交流切磋
全网最全之接口测试【加密解密攻防完整版】实战教程详解相关推荐
- 最简洁,最全面的vue2.0实现轮播图实战教程详解
因为最近在做一个积分奖励项目,首页要做一个轮播图,正好借这这次机会把本次使用vue2.0实现轮播图的详细过程分享出来. 废话不多说,先来个效果图(备注:图片是临时在网上找的,各位关注轮播图效果即可): ...
- Openldap配置TLS加密传输(完整版——shell脚本实现[分别在客户端与服务器端执行脚本,实现TLS加密])
此脚本中只是负责实现了TLS加密配置部分,openLDAP的编译安装以及设置是前期已经配置好的! 具体的配置看上上篇文章openLDAP的编译安装以及配置. 注意slapd.conf中的配置,脚本中为 ...
- Openldap配置TLS加密传输(完整版——shell脚本实现[即在客户端执行代码,即可实现TLS加密])
此脚本中只是负责实现了TLS加密配置部分,openLDAP的编译安装以及设置是前期已经配置好的! 具体的配置看上上篇文章openLDAP的编译安装以及配置. 注意slapd.conf中的配置,脚本中为 ...
- python excel库pip install_超全整理|Python 操作 Excel 库 xlwings 常用操作详解!
原标题:超全整理|Python 操作 Excel 库 xlwings 常用操作详解! 来源:早起Python 作者:陈熹.刘早起 大家好,我是早起. 在之前的文章中我们曾详细的讲解了如何使用openp ...
- 软件接口测试一个项目的实战,全网最全postman接口测试教程和接口项目实战~从入门到精通!!!...
Postman实现接口测试内容大纲一览: 一.什么是接口?为什么需要接口? 接口指的是实体或者软件提供给外界的一种服务. 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改.从而使得内部和外部 ...
- 全网最全appium工作原理以及appium自动化测试环境搭建教程
目录:导读 一.前言 二.Appium简介 三.搭建Appium+Python自动化测试环境 1.安装JDK并配置JDK的环境变量. 2.安装SDK并配置SDK的环境变量. 3.安装夜神模拟器并在模拟 ...
- RSA、MD5加密解密算法全套解析安装教程
第一部分介绍加密解密算法, 第二部分介绍我小组成功应用的RSA.MD5两种加密解密算法,以及心得体会. 1.加密解密算法介绍 应用的开发中安全很重要,所以信息加密技术显得尤为重要.我们需要对应用中的多 ...
- http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎
TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...
- python如何调用文件进行换位加密_python 换位密码算法的实例详解
python 换位密码算法的实例详解 一前言: 换位密码基本原理:先把明文按照固定长度进行分组,然后对每一组的字符进行换位操作,从而实现加密.例如,字符串"Error should neve ...
最新文章
- maven no Maven Dependencies view
- [排序算法] 选择排序(2种)
- Dlib学习笔记:解决dlib array2d转 OpenCV Mat时颜色失真
- 【MFC相关】MFC入门相关
- 小额贷款利息违法吗?
- php同个用户同时只能登陆一个, 后登陆者踢掉前登陆者
- mongodb转实体对像_MongoDB:实体对象(javabean)转DBObject
- Android Service(二)Service的两种启动方式
- c++strcmp函数
- excel冻结窗口_冻结窗口怎么冻结多行
- 利用JavaScript在canvas中画一棵树
- matlab积分法求椭圆周长,用MATLAB计算椭圆周长和牛顿迭代MATLAB实现.doc
- python if函数两个并列条件怎么用_IF函数,多个条件怎么用
- 越优秀越受排挤,牢记这“三句土话”,再艰难也要打好自卫反击
- 多行文本垂直居中的三种方法
- Värde任命新合伙人和高级董事总经理
- 【离散数学】 SEU - 29 - 2021/06/16 - Review (in Chinese)
- 多测师肖sir_高级金牌讲师_app测试之环境安装(001)
- HttpRunnerManager + Jenkins接口自动化测试平台搭建
- SQL(MySql)菜鸟教程知识
热门文章
- java如何找出勾股数组_勾股数组 学习笔记
- 最佳实践 | 通过用户画像工具确定目标用户
- 凡事预则立不预则废,你有自己的应急基金吗?教你如何理财
- 计算机一级考试操作题知识点,计算机一级考操作题知识点归纳.doc
- 翻译翻译,什么叫他妈的惊喜?
- 《面试技巧-招聘篇》课程笔记
- 比心app源码,vue 视频播放
- SpringBoot公共字段自动填充
- 喜报接连,闪马智能与创始人兼CEO彭垚斩获猎云网、雷锋网多项奖项
- 前端开发:Vue报错Avoid mutating a prop directly since the value will be…的解决方法