AES(Advanced Encryption Standard)是一种对称加密算法,也就是加密和解密使用相同的密钥。它是目前应用最广泛的加密算法之一,被广泛应用于数据加密、网络安全、电子商务等领域。
AES算法的加密过程如下:
首先需要选择一个密钥,密钥长度可以是128位、192位或256位。
将明文按照一定的分组方式分成若干个块,每个块的长度为128位。
对每个块进行加密,加密过程中使用的密钥是相同的。
加密过程中,每个块都会经过多轮的加密操作,每轮加密操作包括四个步骤:SubBytes、ShiftRows、MixColumns和AddRoundKey。
最后得到密文。
解密过程与加密过程相反,使用相同的密钥和相同的加密步骤,将密文解密为明文。
需要注意的是,AES算法是一种对称加密算法,密钥的安全性非常重要。如果密钥泄露,那么加密的数据也就不再安全。因此,在使用AES算法进行加密时,需要注意密钥的保护和管理。
# coding:utf-8
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
class AesCrypt():
def __init__(self, key, model, iv):
self.model = {'ECB': AES.MODE_ECB, 'CBC': AES.MODE_CBC}[model]
self.key = self.add_16 (key)
self.iv = iv.encode ('utf-8')
if model == 'ECB':
self.aes = AES.new (self.key, self.model) # 创建aes对象
elif model == 'CBC':
self.aes = AES.new (self.key, self.model, self.iv) # 创建aes对象
def add_16(self,par):
# 补位16字节:python3字符串是unicode编码,需要 encode才可以转换成字节型数据
par = par.encode('utf-8')
while len(par) % 16 != 0:
par += b'\r'
return par
def aesDecrypt(self, text):
# CBC解密需要重新创建一个aes对象
if self.model == AES.MODE_CBC:
self.aes = AES.new(self.key, self.model, self.iv)
text = base64.decodebytes(text.encode('utf-8'))
self.decrypt_text = self.aes.decrypt(text)
return self.decrypt_text.decode('utf-8').strip('\r')
def aesEncrypt(self,text): # CBC模式的加密函数,data为明文,key为16字节密钥,iv为偏移量
# CBC加密需要重新创建一个aes对象
if self.model == AES.MODE_CBC:
self.aes = AES.new(self.key, self.model, self.iv)
text = self.add_16(text) # 补位
# encrypt AES加密 B64encode为base64转二进制编码
result = base64.b64encode(self.aes.encrypt(text))
return str(result, 'utf-8') # 以字符串的形式返回
if __name__ == '__main__':
key = '0102030405060708'
iv = '0102030405060708'
text = '111'
model = 'CBC'
pr = AesCrypt(key,model,iv)
print("加密",pr.aesEncrypt(text))
print("解密:",pr.aesDecrypt(pr.aesEncrypt(text)))