除GCM模式外,还有许多其他加密模式可以使用,例如CTR和CBC。此外,使用密钥派生函数(KDF)生成密钥,使用适当的密钥长度和随机数来加强密码学安全,使用合适的密码学哈希函数来保护会话完整性。以下是一个使用AES-CTR模式和PBKDF2生成密钥的示例:
import os
import hashlib
from Crypto.Cipher import AES
from Crypto.Protocol.KDF import PBKDF2
# 选择合适的密码学哈希函数,例如SHA-256
hash_func = hashlib.sha256
# 生成随机数和盐
nonce = os.urandom(16)
salt = os.urandom(16)
# 生成密钥
password = "MySecretPassword"
key = PBKDF2(password, salt, dkLen=32, count=100000, prf=hash_func)
# 使用CBC模式加密数据
cipher = AES.new(key, AES.MODE_CTR, nonce=nonce)
plaintext = "MyPlaintextData"
ciphertext = cipher.encrypt(plaintext)
# 解密数据
decipher = AES.new(key, AES.MODE_CTR, nonce=nonce)
decrypted = decipher.decrypt(ciphertext)
# 验证数据完整性
tag = hash_func(plaintext).digest()
assert hash_func(decrypted).digest() == tag