Python中實(shí)現(xiàn)對(duì)稱(chēng)加密,最常用的是AES(Advanced Encryption Standard)算法。AES是一種對(duì)稱(chēng)密鑰加密算法,它使用相同的密鑰進(jìn)行加密和解密。
以下是使用Python的pycryptodome
庫(kù)進(jìn)行AES對(duì)稱(chēng)加密的步驟:
pycryptodome
庫(kù)。你可以使用pip進(jìn)行安裝:pip install pycryptodome
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
import base64
# 生成隨機(jī)密鑰
key = get_random_bytes(16) # AES-128需要16字節(jié)密鑰
# 加密數(shù)據(jù)
data = b'Hello, World!' # 要加密的數(shù)據(jù)
cipher = AES.new(key, AES.MODE_CBC) # 創(chuàng)建一個(gè)AES cipher對(duì)象
ct_bytes = cipher.encrypt(pad(data, AES.block_size)) # 加密數(shù)據(jù)并填充到塊大小的整數(shù)倍
iv = base64.b64encode(cipher.iv).decode('utf-8') # 獲取并編碼初始化向量
ct = base64.b64encode(ct_bytes).decode('utf-8') # 獲取并編碼加密后的數(shù)據(jù)
print(f'IV: {iv}')
print(f'CT: {ct}')
# 解密數(shù)據(jù)
ct_bytes = base64.b64decode(ct) # 解碼加密后的數(shù)據(jù)
iv = base64.b64decode(iv) # 解碼初始化向量
cipher = AES.new(key, AES.MODE_CBC, iv) # 創(chuàng)建一個(gè)AES cipher對(duì)象,使用相同的密鑰和IV
pt = unpad(cipher.decrypt(ct_bytes), AES.block_size) # 解密數(shù)據(jù)并去除填充
print(f'PT: {pt.decode("utf-8")}')
注意:
pad
函數(shù)用于將數(shù)據(jù)填充到塊大小的整數(shù)倍,以確保加密數(shù)據(jù)的完整性。同樣,unpad
函數(shù)用于去除填充。Crypto.Random.get_random_bytes
函數(shù)用于生成隨機(jī)密鑰和IV,這在實(shí)際應(yīng)用中非常重要,因?yàn)樗鼈儾荒苁强深A(yù)測(cè)的。