aes
AES 是 Advanced Encryption Standard 的缩写,中文名为高级加密标准,是目前全球应用最广泛的对称加密算法之一,被美国国家标准与技术研究院(NIST)于 2001 年正式采纳,用于替代老旧的 DES 算法。
封装库
butterfly/xlib/util/py_aes.py 模块中封装了 ECB 和 CBC 加密模式,使用的 PKCS7 填充算法,推荐 CBC 模式。
核心特性
对称加密: 加密和解密使用同一把密钥,这意味着通信双方必须预先共享密钥,且密钥需严格保密。
分组加密: AES 是分组密码算法,它会将明文分成固定长度的数据块进行加密,每个数据块的长度固定为 128 位。
密钥长度: 支持三种密钥长度,不同长度对应不同的加密强度和运算复杂度:
128 位(16字节):安全性足够,运算速度最快,适合大多数场景。
192 位:安全性更高,运算速度中等。
256 位:安全性最高,运算速度稍慢,适合对安全性要求极高的场景(如金融、军事)
备注
在Python 2中,AES解密(特别是CBC模式)通常需要使用Crypto.Cipher模块,这是pycryptodome或pycrypto库的一部分。由于pycrypto在Python 3中已不被维护,而pycryptodome是pycrypto的一个分支,并兼容Python 2和Python 3,所以推荐使用pycryptodome。
目前环境中使用的是 pycrypto-2.6
分组加密模式:
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。
CBC 有个初始化向量 iv,加密字符串时,此向量会放在密文后返回(密文 + 向量 iv)
有些算法实现中,仅返回密文,或将向量 iv 放在密文前面,这一点需要注意下
填充算法
ANSIX923
ANSIX923 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节均填充数字零。
下面的示例演示此模式的工作原理。假定块长度为
8,数据长度为 9,则填充用八位字节数等于 7,数据等于 FF FF FF FF FF FF FF FF FF:
数据: FF FF FF FF FF FF FF FF FF
X923 填充: FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 07
ISO10126
ISO10126 填充字符串由一个字节序列组成,此字节序列的最后一个字节填充字节序列的长度,其余字节填充随机数据。
下面的示例演示此模式的工作原理。假定块长度为 8,数据长度为 9,则填充用八位字节数等于 7,数据等于 FF FF FF FF FF FF FF FF FF:
数据: FF FF FF FF FF FF FF FF FF
ISO10126 填充: FF FF FF FF FF FF FF FF FF 7D 2A 75 EF F8 EF 07
None
不填充。
PKCS7
PKCS #7 填充字符串由一个字节序列组成,每个字节填充该字节序列的长度。
下面的示例演示这些模式的工作原理。假定块长度为 8,数据长度为 9,则填充用八位字节数等于 7,数据等于 FF FF FF FF FF FF FF FF FF:
数据: FF FF FF FF FF FF FF FF FF
PKCS7 填充: FF FF FF FF FF FF FF FF FF 07 07 07 07 07 07 07
Zeros
填充字符串由设置为零的字节组成。
Last updated