python對(duì)稱(chēng)加密如何使用

小樊
81
2024-10-26 19:01:18

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)加密的步驟:

  1. 首先,你需要安裝pycryptodome庫(kù)。你可以使用pip進(jìn)行安裝:
pip install pycryptodome
  1. 然后,你可以使用以下代碼進(jìn)行AES對(duì)稱(chēng)加密:
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")}')

注意:

  • 在實(shí)際應(yīng)用中,你應(yīng)該更加小心地處理密鑰,而不是像示例中那樣直接將其打印出來(lái)。
  • 在加密和解密時(shí),確保使用相同的密鑰和IV。
  • 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è)的。

0