接口测试中常见的加密算法-对称加密AES

对称加密算法

1.对称加密

1.1 AES加密

  • AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是同一个。
  • 安装:pip install pycryptodome
  • AES加密最常用的模式就是ECB模式和CBC模式,当然还有很多其它模式,他们都属于AES 加密。ECB模式和CBC模式两者区别就是ECB不需要iv偏移量,而CBC需要。
  • 具体加密过程
    • 参数作用及数据类型

      • 秘钥 加密的时候用秘钥,解密的时候需要同样的秘钥才能解出来;数据类型为bytes
      • 明文需要加密的参数;数据类型为bytes
      • 模式 aes加密常用的有ECB和CBC模式(主要是这两个模式,还有其他模式),数据类型为aes类内部枚举类型
      • iv偏移量这个参数在ECB模式下不需要,在CBC模式下需要;数据类型为bytes
    • 长度

      • 16:*AES-128*
      • 24: *AES-192*
      • 32: *AES-256*
    • mode 加密模式

      • 常见的ECB,CBC
      • ECB:是一种基础的加密方式,密文被分割成多组长度相等的块(不足补齐),然后单独一个个加密,一个个输出,组成密文
      • CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后在加密,这样的操作是为了增加破解难度

1.1.1 ECB加密案例:

from Crypto.Cipher import AES
import base64
key='1234567890123456'.encode()#秘钥
#秘钥:必须是16位字节或者24位字节或者32位字节
text='aaaaa is ddddddd' #需要加密的内容
text=text.encode()
print("完整text:",text)
aes=AES.new(key,AES.MODE_ECB)#创建一个aes对象
en_text=aes.encrypt(text) #加密明文
print("加密数据:",en_text)
en_text=base64.b64encode(en_text).decode()#将返回的字节型数据转化为base64编码
print(en_text) #rRPMWCaOBYahYnKUJzq65A==
  • ECB解密:
from Crypto.Cipher import AES
import base64
key='123456780123456'.encode()#秘钥
model=AES.MODE_ECB#定义模式
aes=AES.new(key,model)#创建一个aes对象
test='3NeIhJsnhzy3Ojoquz+9eg=='.encode()#需要解密的文本
ecrypted_base64=base64.b64decode(text)#base64解码成字节流
str=aes.decrypt(ecrypted_base64).decode()#解密
print(str)
  • 以上是针对ECB模式的加密解密,从这个例子中可以看出参数中有几个限制。
    • 秘钥必须为16字节或者16字节倍数的字节型数据
    • 明文必须为16字节或者16字节的倍数的字节型数据,如果不够16字节需要进行补全
#数据补全
while len(text.encode('utf-8'))%16!=0:
	text+=\0

1.1.2 CBC加密

from Crypto.Cipher import AES
import base64
key='1234567890123456'.encode()#秘钥
text='aaaaaaa is dddddd'
#数据补全
while len(text.encode('utf-8'))%16!=0:
	text+=\0
text=text.encode()
print("完整text:",text)
iv=b'abdcabcdabdcabcd' #偏移量---必须16字节
aes=AES.new(key,AES.MODE_CBC,iv)#创建一个aes对象
en_text=aes.encrypt(text)#加密明文
print("aes加密数据:::",en_text)
en_text=base64.b64encode(en_text).decode()#将返回的字节型数据转换成base64编码
print(en_text)
  • CBC解密

from Crypto.Cipher import AES
import base64
key='1234567890123456'.encode()#秘钥
model=AES.MODE_CBC#定义模式
iv=b'abcdabcdabcdabcd'
aes=AES.new(key,model,iv)#创建一个aes对象
text='J8bwyhYt1chAPAGu8N6kKA=='.encode()
ecrypted_base64=base64.b64decode(text)
str=aes.decrypt(ecrypted_base64).decode()
print("aes解密数据::::",str)
  • 注意
    • 在python中进行AES加密解密时,所传入的密文、明文、秘钥、iv偏移量都需要是bytes(字节型)数据。python在构建aes对象时也只能接受bytes类型数据。
    • 当秘钥、iv偏移量,待加密的明文,字节长度不够16字节或者16字节倍数的时候需要进行补全。
    • CBC模式需要重新生成AES对象,为了防止这类错误,无论是什么模式都重新生成AES对象就可以了。
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值