cryptodome中的AES使用
AES特性
AES为对称加密, 使用密钥来加密解密.
AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同。
python代码
from Cryptodome.Cipher import AES
from Cryptodome import Random
data = '需要加密的数据'
# 密钥key需要为16, 24, 32长度的字节类型数据.
# 我们使用AES-128位(16字节)来使用.
key = b'1234567890123456' # 16bytes
# 还需要使用一个向量.
iv = Random.new().read(AES.block_size) # 生成一个长度等于AES块大小并且不重复的密钥向量对象.
# 使用key和iv初始化AES对象, 使用MODE_CFB模式.
aesobj = AES.new(key, AES.MODE_CFB, iv)
# 加密的数据的长度需为16的倍数, 不足16则会自动补足.
# 将密钥向量加到加密后的密文开头, 一起传输(方便后面解密).
aescrypto = iv + aesobj.encrypt(data.encode())
print(aescrypto)
# 解密需要使用Key和iv生成新的AES对象.
aesobj2 = AES.new(key, AES.MODE_CFB, aescrypto[0:16])
# 使用新的AES对象来解密.
aescrypto2 = aesobj2.decrypt(aescrypto[16:])
print(aescrypto2.decode()) # 这里记得decode()哦
流程
1.准备好合适的key, data.
2.创建iv密钥向量对象.
3.使用key, iv创建用于加密的AES对象.
4.使用加密的AES对象encrypt进行加密.
5.使用原有的key, iv创建用于解密的AES对象.
6.使用解密的AES对象decrypt进行解密.
可以使用binascii模块来对加密后的数据进行格式化输出.
(ps: 遇错得改..)