如何在Python中使用Cryptodome库进行AES加密?
时间: 2024-10-14 15:13:59 浏览: 65
在Python中,使用Cryptodome库进行AES加密可以通过以下步骤实现:
1. 安装Cryptodome库:
```bash
pip install pycryptodome
```
2. 导入必要的模块:
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
```
3. 生成密钥和初始向量(IV):
```python
key = get_random_bytes(16) # 生成一个16字节的随机密钥
iv = get_random_bytes(16) # 生成一个16字节的随机初始向量
```
4. 选择加密模式(例如,CBC模式):
```python
aes = AES.new(key, AES.MODE_CBC, iv)
```
5. 对数据进行加密:
```python
data = b"Secret Message"
padded_data = pad(data, AES.block_size)
ciphertext = aes.encrypt(padded_data)
print("Encrypted:", ciphertext)
```
6. 对数据进行解密(使用相同的密钥和初始向量):
```python
decrypted_padded_data = aes.decrypt(ciphertext)
decrypted_data = unpad(decrypted_padded_data, AES.block_size)
print("Decrypted:", decrypted_data)
```
完整代码示例:
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
# 生成密钥和初始向量
key = get_random_bytes(16)
iv = get_random_bytes(16)
# 创建AES-CBC加密对象
aes = AES.new(key, AES.MODE_CBC, iv)
# 要加密的数据
data = b"Secret Message"
# 对数据进行填充并加密
padded_data = pad(data, AES.block_size)
ciphertext = aes.encrypt(padded_data)
print("Encrypted:", ciphertext)
# 对密文进行解密
decrypted_padded_data = aes.decrypt(ciphertext)
decrypted_data = unpad(decrypted_padded_data, AES.block_size)
print("Decrypted:", decrypted_data)
```
**解释**:
1. **安装Cryptodome库**:`pycryptodome`是`pycrypto`的一个分支,提供了丰富的加密算法,包括AES。
2. **生成密钥和初始向量**:密钥长度可以是16、24或32字节,分别对应AES-128、AES-192和AES-256。初始向量必须是16字节。
3. **选择加密模式**:这里我们使用了CBC模式,但也可以使用其他模式如ECB、CFB等。
4. **对数据进行填充**:因为AES是分组密码,数据长度必须是块大小(16字节)的倍数,所以需要进行填充。
5. **加密和解密**:使用相同的密钥和初始向量进行加密和解密操作。
阅读全文