python实现AES算法
时间: 2025-05-24 09:08:20 浏览: 10
### 使用 Python 实现 AES 加密算法
以下是基于 `pycryptodome` 库实现的 AES 加密和解密示例代码。此库是 `pycrypto` 的更新版本,提供了更稳定的支持。
#### 安装依赖
首先需要安装 `pycryptodome` 库:
```bash
pip install pycryptodome
```
#### 示例代码:AES 加密与解密
以下代码展示了如何使用 `pycryptodome` 来实现 AES 对称加密和解密:
```python
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64
def pad(text, block_size=16):
"""填充函数"""
padding_length = block_size - (len(text) % block_size)
return text + chr(padding_length) * padding_length
def unpad(padded_text):
"""去填充函数"""
return padded_text[:-ord(padded_text[-1])]
def encrypt_aes(key, plaintext):
"""
AES 加密方法
:param key: 密钥(长度需为16字节)
:param plaintext: 明文
:return: Base64 编码后的密文
"""
cipher = AES.new(key.encode(), AES.MODE_CBC, iv=get_random_bytes(16))
padded_plaintext = pad(plaintext).encode()
ciphertext = cipher.encrypt(padded_plaintext)
return base64.b64encode(cipher.iv + ciphertext).decode()
def decrypt_aes(key, encrypted_data):
"""
AES 解密方法
:param key: 密钥(长度需为16字节)
:param encrypted_data: Base64 编码的密文
:return: 解密后的明文
"""
data = base64.b64decode(encrypted_data)
iv = data[:16]
ciphertext = data[16:]
cipher = AES.new(key.encode(), AES.MODE_CBC, iv=iv)
decrypted_padded_text = cipher.decrypt(ciphertext)
return unpad(decrypted_padded_text.decode())
# 测试代码
key = "0123456789abcdef" # 需要提供一个16字节的密钥
plaintext = "This is a secret message."
encrypted_message = encrypt_aes(key, plaintext)
print(f"Encrypted Message: {encrypted_message}")
decrypted_message = decrypt_aes(key, encrypted_message)
print(f"Decrypted Message: {decrypted_message}")
```
上述代码实现了 AES-CBC 模式的加解密操作,并对数据进行了 PKCS#7 填充[^1]。为了便于传输,加密后的密文被转换成 Base64 格式[^4]。
---
### § 相关问题 §
1. 如何调整上述代码支持不同大小的密钥?
2. 如果不使用第三方库,能否纯手工实现 AES 算法?需要注意哪些细节?
3. AES-GCM 和 AES-CBC 在安全性上有什么区别?
4. 在实际应用中,为什么推荐使用随机初始化向量(IV)而不是固定的 IV?
5. SHA-256 是否可以用于替代 AES 提供的数据保护功能?如果不行,原因是什么?
阅读全文
相关推荐


















