歡迎來到下一個 pikoTutorial !
在 Python 中執行對稱加密的最簡單方法之一是使用加密模組中的 Fernet 演算法。讓我們使用命令安裝它:
pip install cryptography
有了可用的加密模組,讓我們來寫第一個加密腳本:
# import Fernet from cryptography.fernet import Fernet # Generate a key key = Fernet.generate_key() # Create a Fernet instance providing the generated key fernet = Fernet(key) # Encrypt the data data = b'Some secret data' encrypted_data = fernet.encrypt(data) # Decrypt the data decrypted_data = fernet.decrypt(encrypted_data) print(f"Decrypted text: {decrypted_data.decode()}")
初學者註意:加密解密資料時都需要金鑰,因此您不能每次都產生新金鑰。加密資料後,您需要儲存金鑰,但因為它是允許您解密資料的東西,所以請記住以某種安全的方式儲存它!
上例中產生的金鑰由隨機位元組組成。此類金鑰非常安全,但通常您需要基於密碼的加密 - 我所說的密碼是指一些易於人類理解並由用戶作為輸入動態提供的短語。下面您可以找到 Python 程式碼,展示如何從使用者取得密碼作為輸入以及如何將其轉換為加密金鑰:
# import utility for Base64 encoding import base64 # import Fernet from cryptography.fernet import Fernet # import getpass for secure input reading from getpass import getpass # read plain text password plain_text_password: str = getpass(prompt='Password: ') # Fernet requires 32 byte key, so the password also must have 32 characters if len(plain_text_password) != 32: raise RuntimeError(f'Password length must be equal 32!') # Encode plain text password to ASCII bytes password_ascii: bytes = plain_text_password.encode('ascii') # Fernet requires key to be url-safe base64-encoded key: bytes = base64.urlsafe_b64encode(password_ascii) # Create a Fernet instance providing the generated key fernet = Fernet(key) # Encrypt the data data = b'Some secret data' encrypted_data = fernet.encrypt(data) # Decrypt the data decrypted_data = fernet.decrypt(encrypted_data) print(f"Decrypted text: {decrypted_data.decode()}")
進階說明:本 pikoTutorial 重點介紹如何使用 Fernet 進行對稱加密,因此它簡化了加密金鑰的創建。在實踐中,當您需要根據使用者提供的密碼建立加密金鑰時,您應該使用金鑰派生函數,例如 PBKDF2HMAC。
以上是使用Python進行對稱資料加密的詳細內容。更多資訊請關注PHP中文網其他相關文章!