Python 加密和解密的原理主要基于密碼學,密碼學是一門研究信息安全和保密的科學。在 Python 中,我們可以使用多種加密和解密算法來實現這一目的。以下是一些常見的加密和解密算法及其原理:
對稱加密(Symmetric Encryption): 對稱加密是指加密和解密使用相同的密鑰。在這種加密算法中,加密和解密的速度較快,因為它們使用相同的算法。常見的對稱加密算法有 AES(高級加密標準)、DES(數據加密標準)和 3DES(三重數據加密算法)。
非對稱加密(Asymmetric Encryption): 非對稱加密是指加密和解密使用不同的密鑰,一個用于加密,另一個用于解密。這種加密算法的安全性較高,因為即使攻擊者獲得了加密密鑰,他們也無法輕易解密密文。常見的非對稱加密算法有 RSA(Rivest-Shamir-Adleman)和 ECC(橢圓曲線加密)。
散列函數(Hash Functions): 散列函數是一種將任意長度的輸入數據映射到固定長度輸出的單向函數。它們主要用于驗證數據的完整性和一致性。常見的散列算法有 MD5(消息摘要算法 5)、SHA-1(安全散列算法 1)和 SHA-256(安全散列算法 256)。
加密庫(Cryptographic Libraries):
Python 提供了一些加密庫,如 cryptography
和 pycryptodome
,這些庫提供了許多加密和解密算法的實現。在使用這些庫時,我們通常需要導入相應的模塊,然后使用庫提供的函數進行加密和解密操作。
以下是一個簡單的 Python 對稱加密和解密示例,使用 AES 算法:
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
# 加密函數
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
# 解密函數
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('原始數據:', data)
print('加密后的數據:', encrypted_data)
print('解密后的數據:', decrypted_data)
在這個示例中,我們使用了 Crypto
庫提供的 AES 加密和解密函數。首先,我們創建一個 AES 密鑰,然后使用加密函數對數據進行加密,最后使用解密函數對加密后的數據進行解密。