对称加密AES
AES有两种模式:CBC和ECB
ECB模式和CBC 模式俩者区别就是 ECB不需要iv偏移量,而CBC需要。
MODE 加密模式
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度。
长度
16:*AES-128*
24:*AES-192*
32:*AES-256*
pip install pycryptodome
加密
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad #用于补全
import base64# 愿文数据
data = "Life is fucking movie" # 必须是16的倍数
data = pad(data.encode(), 16)#上面不够16的整数倍,进行填充补全
print("填充完的data:::", data)
key = "asdfghjkl1234567".encode() # 因为是AES128模式,必须是16个字节;16*8=128bit
iv = "1234567890abcdef".encode() # 必须是16个字节
aes = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)#实例化
# 基于aes算法对象对数据做加密
encrypt_data = aes.encrypt(data) #注意这里传入的是字节
print("encrypt_data:::", encrypt_data)# base64编码
b64encode_encrypt_data = base64.b64encode(encrypt_data)
print(b64encode_encrypt_data.decode())# 填充完的data::: b'Life is fucking movie\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b'
# encrypt_data::: b'\xccl{\x8fj\t:\xb3\x922@X\xde\x86rG\x16\xef\xf7g\xad^\x1fB\xb7(0D\x17\x85t\x90'
# zGx7j2oJOrOSMkBY3oZyRxbv92etXh9CtygwRBeFdJA=
解密
import base64
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpadb64encode_encrypt_data = 'zGx7j2oJOrOSMkBY3oZyRxbv92etXh9CtygwRBeFdJA='
# 进行base64的解码
encrypt_data = base64.b64decode(b64encode_encrypt_data)
print("encrypt_data:", encrypt_data)# aes解密
key = "asdfghjkl1234567".encode() # 必须是16个字节
iv = "aw34567890abcdef".encode() # 必须是16个字节
aes = AES.new(key=key, mode=AES.MODE_CBC, iv=iv)data = aes.decrypt(encrypt_data)
print("data:", data)
data = unpad(data, 16)#去除填充部分
print("source data:", data.decode())
