使用py实现cbc模式的aes的加解密
时间: 2024-05-02 09:16:31 浏览: 16
以下是使用Python实现CBC模式的AES加解密的示例代码:
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
# 加密函数
def encrypt(key, iv, plaintext):
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(pad(plaintext.encode(), AES.block_size))
return base64.b64encode(ciphertext).decode()
# 解密函数
def decrypt(key, iv, ciphertext):
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = unpad(cipher.decrypt(base64.b64decode(ciphertext)), AES.block_size)
return plaintext.decode()
# 测试
key = b'Sixteen byte key'
iv = b'Initialization Ve'
plaintext = 'Hello, world!'
ciphertext = encrypt(key, iv, plaintext)
print('加密后的密文:', ciphertext)
decrypted_text = decrypt(key, iv, ciphertext)
print('解密后的明文:', decrypted_text)
```
在这个示例中,我们使用了PyCryptodome库来实现AES加解密,它是Python加密库的一个分支,提供了对AES加密的支持。我们还使用了Padding库来确保明文的长度是AES块大小的倍数。
在加密函数中,我们首先创建了一个AES对象,该对象使用CBC模式和指定的IV向量。我们然后使用pad函数来填充明文,使其长度为AES块大小的倍数。最后,我们使用base64编码来生成可读的密文。
在解密函数中,我们首先使用与加密函数相同的参数创建AES对象。我们然后使用unpad函数来删除填充,并使用base64解码来获取原始密文。最后,我们将解密的明文返回。
请注意,示例中使用的密钥和IV向量是硬编码的,这不是一个好的实践。在实际应用中,您应该使用安全的随机生成的密钥和IV向量来加密和解密数据。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)