AES 加密的基本概念
AES(Advanced Encryption Standard)是一种对称加密算法,广泛应用于数据加密。它支持 128、192 和 256 位密钥长度,通常需要配合加密模式(如 CBC、ECB)和填充方式(如 PKCS7)使用。
安装必要的库
Python 中可以使用 pycryptodome 库实现 AES 加密。安装命令如下:
pip install pycryptodome
AES 加密示例代码
以下是一个完整的 AES 加密和解密示例,使用 CBC 模式和 PKCS7 填充:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
import base64
# 加密函数
def aes_encrypt(plaintext, key):
iv = get_random_bytes(16) # 生成随机初始化向量
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size))
return base64.b64encode(iv + ciphertext).decode('utf-8')
# 解密函数
def aes_decrypt(ciphertext, key):
data = base64.b64decode(ciphertext)
iv = data[:16] # 提取初始化向量
ciphertext = data[16:]
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)
return plaintext.decode('utf-8')
# 测试
key = get_random_bytes(32) # 256 位密钥
plaintext = "Hello, AES!"
encrypted = aes_encrypt(plaintext, key)
decrypted = aes_decrypt(encrypted, key)
print("加密结果:", encrypted)
print("解密结果:", decrypted)
关键参数说明
- 密钥长度:AES 支持 128、192 和 256 位密钥,分别对应 16、24 和 32 字节。
- 初始化向量(IV):CBC 模式需要随机生成的 IV,长度与块大小(16 字节)一致。
- 填充方式:PKCS7 是常用填充方式,确保数据长度是块大小的整数倍。
其他加密模式
除了 CBC,还可以使用其他模式如 ECB(不推荐)、GCM(带认证)等。例如 GCM 模式代码片段:
cipher = AES.new(key, AES.MODE_GCM)
ciphertext, tag = cipher.encrypt_and_digest(plaintext.encode('utf-8'))
注意事项
- 密钥管理:密钥需要安全存储,避免硬编码在代码中。
- 模式选择:ECB 模式不安全,推荐使用 CBC 或 GCM。
- 数据编码:加密后的二进制数据通常需通过 Base64 编码转换为字符串。
通过以上代码和说明,可以快速实现 Python 中的 AES 加密功能。
5180

被折叠的 条评论
为什么被折叠?



