前言

先前已经学过了Python-SHA256加密算法接口测试,今天我跟大家讲解一下AES加密算法的接口如何写python脚本进行测试。

AES加密算法

高级加密标准*(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。*对称加密算法,即相同的加密模式需要用相同加密模式解密

加密模式

EBC模式

ECB算法优点:简单、孤立,每个块单独运算。适合并行运算。传输错误一般只影响当前块。

ECB算法缺点:同明文输出同密文,可能导致明文攻击。我们平时用的AES加密很多都是ECB模式的,此模式加密不需要向量IV。

CBC模式

CBC算法优点:串行化运算,相同明文不同密文

CBC算法缺点:需要初始向量,不过这其实不算缺点,下文的CTR也是需要随机数的。如果出现传输错误,那么后续结果解密后可能全部错误。

CFB模式

CFB算法优点:同明文不同密文,分组密钥转换为流密码。

CFB算法缺点:串行运算不利并行,传输错误可能导致后续传输块错误。

OFB模式

OFB算法优点:同明文不同密文,分组密钥转换为流密码。

OFB算法缺点:串行运算不利并行,传输错误可能导致后续传输块错误。

数据填充

填充模式

主要针对待加密的数据进行区分数据块,数据块长度不足可以进行填充

填充的主要模式:pkcs7,x923,zero

zero---最简单,长度不足则补零

填充长度

128位,192位,256位,一个字节等于8位,因此填充长度对应设置为16, 24, 32即可。

密钥

原始密钥通过加工以后变为可以使用的

密钥长度

128位,192位,256位,一个字节等于8位,因此密钥长度对应设置为16, 24, 32即可。

密钥填充模式

自定义,可以和数据块填充模式不一样。

向量

ECB模式不需要IV

向量长度

同密钥长度

填充模式

自定义,可以和数据块填充模式不一样。

输出编码:base64,hex

例:AES加密流程(EBC模式)

1.生成加密器

确定密钥(1.确定原始密钥, 2.确定密钥长度,如果长度不够需要填充 3.如果需要填充可以自定义填充模式)

确定加密模式(选择EBC模式)

2.加密数据块

原始数据填充(1.确定区块长度,如果原始数据分割后区块长度不够需要填充,2.如果需要填充可以选择填充模式)加密器加密)

3.将密文重新编码

可以使用base64编码,解密就是将相同的加密过程倒着来一遍

一:安装pycryptodome模块

pip install pycryptodome

二:定义AES加密的方法,本次使用ECB模式加密

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad #自定义填充模式-zeropadding
#字符长度不足16(128位)
def add_to_16(value):
while len(value)%16 !=0:
value += '\0'
return value.encode()#转成字节形式 #定义加密方法
def encrypt_ecb(pt,key='hello123321olleh'):
#1初始化加密器:128位key,ECB模式加密
aes=AES.new(add_to_16(key),AES.MODE_ECB)
#2.处理数据块-128位,pkcs7模式
block=pad(pt.encode('utf8'),16)
#3.加密数据块
tmp=aes.encrypt(block)
#4.base64编码数据
ct=base64.encodebytes(tmp).decode()
return ct

三:定义解密的方法

#定义解密方法
def decrypt_ecb(ct,key='hello123321olleh'):
# 1.初始化加密器:128位key,ECB模式加密
aes = AES.new(add_to_16(key), AES.MODE_ECB)
# 2.解码base64
block=base64.decodebytes(ct.encode('utf8'))
#3.解密数据块
tmp = aes.decrypt(block)
# print(tmp)
#4.反填充数据-转成字符串
pt=unpad(tmp,16).decode('utf8')
return pt

四:代码如下

import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad #自定义填充模式-zeropadding
#字符长度不足16(128位)
def add_to_16(value):
while len(value)%16 !=0:
value += '\0'
return value.encode()#转成字节形式 #定义加密方法
def encrypt_ecb(pt,key='hello123321olleh'):
#1初始化加密器:128位key,ECB模式加密
aes=AES.new(add_to_16(key),AES.MODE_ECB)
#2.处理数据块-128位,pkcs7模式
block=pad(pt.encode('utf8'),16)
#3.加密数据块
tmp=aes.encrypt(block)
#4.base64编码数据
ct=base64.encodebytes(tmp).decode()
return ct #定义解密方法
def decrypt_ecb(ct,key='hello123321olleh'):
# 1.初始化加密器:128位key,ECB模式加密
aes = AES.new(add_to_16(key), AES.MODE_ECB)
# 2.解码base64
block=base64.decodebytes(ct.encode('utf8'))
#3.解密数据块
tmp = aes.decrypt(block)
# print(tmp)
#4.反填充数据-转成字符串
pt=unpad(tmp,16).decode('utf8')
return pt #完成加密接口测试 if __name__ == '__main__':
import requests
payload = '''
{
"action":"add_case",
"data":{
"title": "test12345",
"summary": "test11111111111111111",
"tag": "test",
"protocol": "HTTP",
"method": "GET",
"path": "/",
"params": "test"
}
}
'''
# 加密原始报文
ct = encrypt_ecb(payload)
body = {'code': ct}
# 发送加密报文
resp = requests.post('http://localhost:9090/api/aes', data=body)
code=resp.json()['code']
print(decrypt_ecb(code))

Python-AES加密算法接口测试的更多相关文章

  1. jmeter接口测试-使用aes加密算法

    好久没写文章了,一直在忙公司项目的事情!今天抽空写篇关于jmeter加密的教程吧! 随着互联网的发展,越来越多的系统开始提供接口调用! 我们进行接口测试的时候,大多数接口或多或少的都使用了各种加密验证 ...

  2. JMeter-SHA256加密算法接口测试

    前言 我们已经学过了如何利用python脚本对SHA256加密接口进行测试,还没学会的小伙伴们可以看回我写的随笔Python-SHA256加密算法接口测试,那么,对于SHA256加密算法接口,我们如何 ...

  3. Python-MD5加密算法接口测试

    前言 在之前的Python系列的随笔中,我跟小伙伴们讲述了Python-AES加密算法接口测试和Python-SHA256加密算法接口测试,今天我们来学习一下登录密码是md5加密的情况下,该如何使用p ...

  4. AES加密算法C++实现

    我从网上下载了一套AES加密算法的C++实现,代码如下: (1)aes.h #ifndef SRC_UTILS_AES_H #define SRC_UTILS_AES_H class AES { pu ...

  5. python aes加解密

    python AES加密解密 python AES 双向对称加密解密 Python中进行Base64编码和解码 # encoding:utf-8 import base64 from Crypto.C ...

  6. PHP android ios相互兼容的AES加密算法

    APP项目用户密码传输一直没有用HTTPS,考虑到用户的隐私暂时先用AES对密码加密,以后也可以用于手机端与服务端加密交互. PHP的免费版phpAES项目,手机端解码各种不对. 好不容易找了PHP ...

  7. Qt使用AES加密算法对字符串进行加密

          因工作需要,需要对字符串进行加密处理,在网上找了很长时间,终于找到了一个可以使用的aes加密算法.其源代码采用c++编写而成,但其头文件引用windows.h,经过修改部分代码,将#inc ...

  8. Android AES加密算法及事实上现

    昨天老大叫我看看android加密算法.于是网上找了找,找到了AES加密算法.(当然还有MD5,BASE64什么的http://snowolf.iteye.com/blog/379860这篇文章列举了 ...

  9. iOS,Android,.NET通用AES加密算法

    原文:iOS,Android,.NET通用AES加密算法 这两天为移动App开发API,结果实现加密验证时碰到一大坑.这里不得不吐槽下又臭又硬的iOS,Windows Server无法解密出正确的结果 ...

随机推荐

  1. JDBC 中的事务和批处理 batch

    JDBC事务处理: 事务处理一般在事务开始前把事务提交设置为false 所有DML语句执行完成后提交事务 demo: package com.xzlf.jdbc; import java.sql.Co ...

  2. sqlliab7-8

    less-7 https://www.jianshu.com/p/20d1282e6e1d ?id=0')) union select 1,'2','<?php @eval($_POST[&qu ...

  3. linux 批量删除文件

    来源;https://www.cnblogs.com/sinpo/p/7106998.html linux下批量删除文件   1. 在linux批量删除多级目录下同一格式的文件,可采用find + e ...

  4. 第九次-DFA最小化,语法分析初步

    1.将DFA最小化:教材P65 第9题 2.构造以下文法相应的最小的DFA S→ 0A|1B A→ 1S|1 B→0S|0 3.自上而下语法分析,回溯产生的原因是什么? 4.P100 练习4,反复提取 ...

  5. linux 之学习路线

    原文地址:https://www.oschina.net/question/587367_156024 推荐的发行版如下: UBUNTU 适合纯菜鸟,追求稳定的官方支持,对系统稳定性要求较弱,喜欢最新 ...

  6. SVN签出,回退

    2019独角兽企业重金招聘Python工程师标准>>> yum install -y subversion 安装SVN 签出代码 : [root@test svn]# svn che ...

  7. CSS3轻松实现彩色旋转六面体动画

    一.效果预览: 二.基本思路: 1.首先这个一个自动触发的动画,因此应使用animation设计,包括自动组装和组装完成后自动旋转的过程: 2.当鼠标放上去的时候六个面及上面的字体均变色,应在六个面设 ...

  8. 通用权限管理系统组件 (GPM - General Permissions Manager)

    有的公司开发人员只那么几个,一个人支撑整个公司所有的IT系统实在有点累,不想自己写权限系统了,自己琢磨不也是要花时间和精力,要为此付出多少时间和汗水阿,细细的皱纹不知要多多少呢,重复建设不是白白浪费生 ...

  9. Codeforce 1255 Round #601 (Div. 2)B. Fridge Lockers(思维)

    Hanh lives in a shared apartment. There are nn people (including Hanh) living there, each has a priv ...

  10. 网络流--最大流--POJ 1273 Drainage Ditches

    链接 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clov ...