Python 加密和解密的原理主要基于密碼學(xué),密碼學(xué)是一門研究信息安全和保密的科學(xué)。在 Python 中,我們可以使用多種加密和解密算法來實現(xiàn)這一目的。以下是一些常見的加密和解密算法及其原理:
對稱加密(Symmetric Encryption): 對稱加密是指加密和解密使用相同的密鑰。在這種加密算法中,加密和解密的速度較快,因為它們使用相同的算法。常見的對稱加密算法有 AES(高級加密標(biāo)準(zhǔn))、DES(數(shù)據(jù)加密標(biāo)準(zhǔn))和 3DES(三重數(shù)據(jù)加密算法)。
非對稱加密(Asymmetric Encryption): 非對稱加密是指加密和解密使用不同的密鑰,一個用于加密,另一個用于解密。這種加密算法的安全性較高,因為即使攻擊者獲得了加密密鑰,他們也無法輕易解密密文。常見的非對稱加密算法有 RSA(Rivest-Shamir-Adleman)和 ECC(橢圓曲線加密)。
散列函數(shù)(Hash Functions): 散列函數(shù)是一種將任意長度的輸入數(shù)據(jù)映射到固定長度輸出的單向函數(shù)。它們主要用于驗證數(shù)據(jù)的完整性和一致性。常見的散列算法有 MD5(消息摘要算法 5)、SHA-1(安全散列算法 1)和 SHA-256(安全散列算法 256)。
加密庫(Cryptographic Libraries):
Python 提供了一些加密庫,如 cryptography
和 pycryptodome
,這些庫提供了許多加密和解密算法的實現(xiàn)。在使用這些庫時,我們通常需要導(dǎo)入相應(yīng)的模塊,然后使用庫提供的函數(shù)進行加密和解密操作。
以下是一個簡單的 Python 對稱加密和解密示例,使用 AES 算法:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
# 加密函數(shù)
def encrypt(data, key):
cipher = AES.new(key, AES.MODE_CBC)
ct_bytes = cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))
iv = cipher.iv
return iv + ct_bytes
# 解密函數(shù)
def decrypt(encrypted_data, key):
iv = encrypted_data[:AES.block_size]
ct = encrypted_data[AES.block_size:]
cipher = AES.new(key, AES.MODE_CBC, iv)
return unpad(cipher.decrypt(ct), AES.block_size).decode('utf-8')
# 示例
key = get_random_bytes(16)
data = 'Hello, World!'
encrypted_data = encrypt(data, key)
decrypted_data = decrypt(encrypted_data, key)
print('原始數(shù)據(jù):', data)
print('加密后的數(shù)據(jù):', encrypted_data)
print('解密后的數(shù)據(jù):', decrypted_data)
在這個示例中,我們使用了 Crypto
庫提供的 AES 加密和解密函數(shù)。首先,我們創(chuàng)建一個 AES 密鑰,然后使用加密函數(shù)對數(shù)據(jù)進行加密,最后使用解密函數(shù)對加密后的數(shù)據(jù)進行解密。