利用AES对一段数据进行加解密(尝试使用不同分组工作模式,如ECB,CBC)。要求:利用AES的CBC模式加密数据,定义填充函数对不足128位密钥及明文进行填充,定义加解密函数;密文位字符串形式不能显示乱码(用base64编码成字符串)。
时间: 2024-05-12 08:16:18 浏览: 150
用AES算法进行加密解密
4星 · 用户满意度95%
好的,这是一个关于AES加解密的技术问题,我可以帮您回答。以下是加解密代码示例:
```python
import base64
from Crypto.Cipher import AES
# 加密函数
def AES_encrypt(key, text):
pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16) # 填充函数,使得数据长度为 16 的整数倍
text = pad(text).encode('utf-8')
iv = b'1234567890123456' # 初始化向量,为16位任意字符
cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv)
encrypted_text = cipher.encrypt(text)
return base64.b64encode(encrypted_text).decode('utf-8') # 将二进制字符串转换成base64字符串
# 解密函数
def AES_decrypt(key, text):
decode = lambda s: s.decode('utf-8')
text = base64.b64decode(text.encode('utf-8')) # 将base64字符串转换成二进制字符串
iv = b'1234567890123456' # 初始化向量,为16位任意字符
cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv)
decrypted_text = cipher.decrypt(text)
return decode(decrypted_text[:-decrypted_text[-1]]) # 去除填充的字符
# 测试
if __name__ == '__main__':
key = '1234567890123456' # 密钥必须为16位
text = '我的机密信息'
encrypted_text = AES_encrypt(key, text)
print('加密后的密文为:', encrypted_text)
decrypted_text = AES_decrypt(key, encrypted_text)
print('解密后的明文为:', decrypted_text)
```
在此代码示例中,我使用了AES的CBC模式加密数据,并定义了填充函数和加解密函数,最后将密文进行base64编码成字符串使其可以正常显示。
阅读全文