Python中实现对称加密,最常用的是AES(Advanced Encryption Standard)算法。AES是一种对称密钥加密算法,它使用相同的密钥进行加密和解密。
以下是使用Python的pycryptodome
库进行AES对称加密的步骤:
pycryptodome
库。你可以使用pip进行安装:pip install pycryptodome
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
import base64
# 生成随机密钥
key = get_random_bytes(16) # AES-128需要16字节密钥
# 加密数据
data = b'Hello, World!' # 要加密的数据
cipher = AES.new(key, AES.MODE_CBC) # 创建一个AES cipher对象
ct_bytes = cipher.encrypt(pad(data, AES.block_size)) # 加密数据并填充到块大小的整数倍
iv = base64.b64encode(cipher.iv).decode('utf-8') # 获取并编码初始化向量
ct = base64.b64encode(ct_bytes).decode('utf-8') # 获取并编码加密后的数据
print(f'IV: {iv}')
print(f'CT: {ct}')
# 解密数据
ct_bytes = base64.b64decode(ct) # 解码加密后的数据
iv = base64.b64decode(iv) # 解码初始化向量
cipher = AES.new(key, AES.MODE_CBC, iv) # 创建一个AES cipher对象,使用相同的密钥和IV
pt = unpad(cipher.decrypt(ct_bytes), AES.block_size) # 解密数据并去除填充
print(f'PT: {pt.decode("utf-8")}')
注意:
pad
函数用于将数据填充到块大小的整数倍,以确保加密数据的完整性。同样,unpad
函数用于去除填充。Crypto.Random.get_random_bytes
函数用于生成随机密钥和IV,这在实际应用中非常重要,因为它们不能是可预测的。