利用AES对一段数据进行加解密(尝试使用不同分组工作模式,如ECB,CBC)。要求:利用AES的CBC模式加密数据,定义填充函数对不足128位密钥及明文进行填充,定义加解密函数;密文位字符串形式不能显示乱码(用base64编码成字符串)。(交代码)
时间: 2024-05-11 22:16:20 浏览: 14
好的,以下是示例代码:
```
import base64
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 定义 AES 加解密函数
def encrypt(key, iv, plaintext):
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
padded_plaintext = pad(plaintext)
ciphertext = cipher.encrypt(padded_plaintext)
return ciphertext
def decrypt(key, iv, ciphertext):
cipher = AES.new(key, AES.MODE_CBC, iv=iv)
padded_plaintext = cipher.decrypt(ciphertext)
plaintext = unpad(padded_plaintext)
return plaintext
# 定义填充函数
def pad(data):
block_size = AES.block_size
padding = block_size - len(data) % block_size
padded_data = data + bytes([padding] * padding)
return padded_data
def unpad(data):
padding = data[-1]
unpadded_data = data[:-padding]
return unpadded_data
# 测试
key = get_random_bytes(AES.block_size)
iv = get_random_bytes(AES.block_size)
plaintext = b'This is a test message.'
ciphertext = encrypt(key, iv, plaintext)
encoded_ciphertext = base64.b64encode(ciphertext).decode()
print('Encrypted message:', encoded_ciphertext)
decoded_ciphertext = base64.b64decode(encoded_ciphertext)
decrypted_plaintext = decrypt(key, iv, decoded_ciphertext)
print('Decrypted message:', decrypted_plaintext.decode())
```
注:以上代码使用 Crypto 库实现 AES 加解密,其中随机生成 key 和 iv,使用 CBC 模式对明文进行加密,并使用填充函数对不足 128 位的明文进行填充。加密后的密文使用 base64 编码成字符串输出,解密时需先将字符串解码为 bytes 类型后再进行解密。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)