Python加密解密-AES

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字节。

你可能感兴趣的:(Python加密解密-AES)