在Python中,加密和解密可以通過(guò)多種方式實(shí)現(xiàn)。以下是一些常用的加密和解密技巧:
cryptography
:cryptography
是一個(gè)功能強(qiáng)大的加密庫(kù),提供了許多加密算法,如AES、DES和RSA等。以下是使用AES加密和解密的示例:
from cryptography.fernet import Fernet
# 生成密鑰
key = Fernet.generate_key()
# 創(chuàng)建Fernet對(duì)象
cipher_suite = Fernet(key)
# 加密數(shù)據(jù)
data = b"Hello, World!"
encrypted_data = cipher_suite.encrypt(data)
print("Encrypted data:", encrypted_data)
# 解密數(shù)據(jù)
decrypted_data = cipher_suite.decrypt(encrypted_data)
print("Decrypted data:", decrypted_data.decode())
pycryptodome
:pycryptodome
是另一個(gè)流行的加密庫(kù),提供了許多加密算法,如AES、DES和RSA等。以下是使用AES加密和解密的示例:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
import base64
# 生成密鑰
key = get_random_bytes(16)
# 創(chuàng)建AES對(duì)象
cipher = AES.new(key, AES.MODE_CBC)
# 加密數(shù)據(jù)
data = b"Hello, World!"
iv = cipher.iv
encrypted_data = cipher.encrypt(pad(data, AES.block_size))
print("Encrypted data:", base64.b64encode(iv + encrypted_data).decode())
# 解密數(shù)據(jù)
iv = base64.b64decode(encrypted_data[:16])
encrypted_data = base64.b64decode(encrypted_data[16:])
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_data = unpad(cipher.decrypt(encrypted_data), AES.block_size)
print("Decrypted data:", decrypted_data.decode())
pyOpenSSL
:pyOpenSSL
是一個(gè)基于OpenSSL的Python庫(kù),提供了許多加密算法,如AES、DES和RSA等。以下是使用AES加密和解密的示例:
import OpenSSL
# 生成密鑰
key = OpenSSL.rand(OpenSSL.crypto.SHA256().digest_size)
cipher = OpenSSL.crypto.Cipher("AES-256-CBC", key, None)
# 加密數(shù)據(jù)
data = b"Hello, World!"
encrypted_data = cipher.encrypt(data)
print("Encrypted data:", encrypted_data)
# 解密數(shù)據(jù)
cipher = OpenSSL.crypto.Cipher("AES-256-CBC", key, None)
cipher.set_iv(encrypted_data[:cipher.iv_length])
decrypted_data = cipher.decrypt(encrypted_data[cipher.iv_length:])
print("Decrypted data:", decrypted_data)
在使用這些庫(kù)時(shí),請(qǐng)確保正確處理密鑰和初始化向量(IV),因?yàn)樗鼈儗?duì)于解密過(guò)程至關(guān)重要。同時(shí),注意選擇合適的加密算法和模式,以確保數(shù)據(jù)的安全性。