AES加密

简介

AES的全称是Advanced Encryption Standard,意思是高级加密标准。它的出现主要是为了取代DES加密算法的,因为我们都知道DES算法的密钥长度是56Bit,因此算法的理论安全强度是2的56次方。但二十世纪中后期正是计算机飞速发展的阶段,元器件制造工艺的进步使得计算机的处理能力越来越强,虽然出现了3DES的加密方法,但由于它的加密时间是DES算法的3倍多,64Bit的分组大小相对较小,所以还是不能满足人们对安全性的要求。于是1997年1月2号,美国国家标准技术研究所宣布希望征集高级加密标准,用以取代DES。AES也得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法。最终有5个候选算法进入最后一轮:Rijndael,Serpent,Twofish,RC6和MARS。最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael算法获胜。

在密码标准征集中,所有AES候选提交方案都必须满足以下标准:

  • 分组大小为128位的分组密码。

  • 必须支持三种密码标准:128位、192位和256位。

  • 比提交的其他算法更安全。

  • 在软件和硬件实现上都很高效。

AES密码与分组密码Rijndael基本上完全一致,Rijndael分组大小和密钥大小都可以为128位、192位和256位。然而AES只要求分组大小为128位,因此只有分组长度为128Bit的Rijndael才称为AES算法。本文只对分组大小128位,密钥长度也为128位的Rijndael算法进行分析。密钥长度为192位和256位的处理方式和128位的处理方式类似,只不过密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。

注意:

CBC加密需要一个十六位的key(密钥)和一个十六位iv(偏移量)

ECB加密不需要iv

安装

pip install pycryptodome

导入

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
from Crypto.Util.Padding import unpad
import base64

加密解密流程(ECB模式,pkcs7填充模式)

初始化构造函数,此时的Mod为ECB

'''
@use: 构造函数
@parameter: 密钥
'''
def __init__(self,key):
    self.__key = key.encode("UTF-8") # 将字符串转换成UTF-8的字节流
    self.__mode = AES.MODE_ECB

AES加密

'''  
@use: AES加密
@parameter: 
    data 需要加密的明文
@return: 
    加密后的密文(ECB模式,pkcs7填充)
'''
def encrypt(self, data):
    cipher = AES.new(self.__key, self.__mode) # 传输key和mode进入AES类
    # 将数据转换成UTF-8字节流后,用pksc7填充模式进行16位填充并加密
    encrData = cipher.encrypt(pad(data.encode("UTF-8"), 16, "pkcs7"))
    # 将加密过后的密文进行base64编码,之后转换成字符串类型得到密文
    return str(base64.b64encode(encrData),encoding="UTF-8")

AES解密

'''  
@use: AES解密
@parameter: 
    encrData 加密后的密文(ECB模式,pkcs7填充)
@return: 
    解密后的明文
'''
def decrypt(self, encrData):
    cipher = AES.new(self.__key, self.__mode) # 传输key和mode进入AES类
    encrData = bytes(encrData,"UTF-8") # 将密文字符串转换成UTF-8字节流
    encrData = base64.b64decode(encrData) # 将密文字节流用base64编码
    decr_code = cipher.decrypt(encrData) # 解密
    # 用pksc7填充模式进行16位填充对解密数据进行转换,后转换成字符串形式得到明文
    return str(unpad(decr_code,16,"pkcs7"),"UTF-8")
文章作者: Vsoapmac
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 soap的会员制餐厅
python 加密算法
喜欢就支持一下吧