python中cryptodome的AES

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: 遇错得改..)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是Python使用AES加密和解密的示例代码: ```python from Crypto.Cipher import AES import base64 # 加密函数 def encrypt(text, key): # 密钥长度必须为16(AES-128)、24(AES-192)或32(AES-256)Bytes长度 key = key.encode('utf-8') text = text.encode('utf-8') iv = b'0000000000000000' # 16 Bytes的初始化向量(IV) mode = AES.MODE_CBC cipher = AES.new(key, mode, iv) # 加密函数要求明文长度必须为16的倍数,因此需要进行补位操作 length = 16 count = len(text) if count % length != 0: add = length - (count % length) else: add = 0 text = text + (b'\0' * add) ciphertext = cipher.encrypt(text) # base64编码返回 return base64.b64encode(ciphertext) # 解密函数 def decrypt(text, key): key = key.encode('utf-8') iv = b'0000000000000000' # 16 Bytes的初始化向量(IV) mode = AES.MODE_CBC cipher = AES.new(key, mode, iv) # base64解码 text = base64.b64decode(text) plaintext = cipher.decrypt(text) # 去除补位 return plaintext.rstrip(b'\0').decode('utf-8') # 测试 text = '这是一个测试文本' key = '1234567890123456' encrypt_text = encrypt(text, key) print('加密后的文本:', encrypt_text) decrypt_text = decrypt(encrypt_text, key) print('解密后的文本:', decrypt_text) ``` 需要注意的是,加密函数和解密函数的密钥必须相同,否则无法正确解密。同时,在加密函数,需要进行补位操作,以保证明文长度为16的倍数,这是由于AES加密算法的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值