AES是对称加密,同一个密钥同时用来加密和解密.
AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐).
#示例
from Crypto.Cipher import AES
from Crypto import Random
key = b'Sixteen byte key'
iv = Random.new().read(AES.block_size)
cipher = AES.new(key, AES.MODE_CFB, iv)
msg = iv + cipher.encrypt(b'Attack at dawn')
print iv
print msg
iv
用于加密或解密的初始化向量。
在“MODE_ECB”和“MODE_CTR”下此字段被忽略。
对于“MODE_OPENPGP”,IV必须是block_size
字节长度加密
和block_size+ 2
字节的解密(加密的* IV是预先固定在密文上的)
并且是强制性的。
AES.MODE(用于加密或解密的链接模式)
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
-
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或操作后再加密,这样做的目的是增强破解难度。
ECB和CBC的加密结果是不一样的,两者的模式不同,而且CBC会在第一个密码块运算时加入一个初始化向量(第三个参数iv)。
CFB/OFB实际上是一种反馈模式,目的也是增强破解的难度。CFB需要带上
segment_size
参数PGP:
This mode should not be used.
CTR:带上
counter
参数OPENPGP: 这种模式是CFB的一种变体,它只在PGP和OpenPGP应用程序中使用。需要一个初始化向量(IV)。
与CFB不同,IV不是传输到接收机。相反,加密的IV是一个随机数据块。它的两个字节被复制,以作为键的正确性的校验和。因此加密的IV比clean IV长2字节。