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,這在實際應用中非常重要,因為它們不能是可預測的。