首頁 >後端開發 >Python教學 >如何在 Python 中使用密碼安全地加密和解密字串?

如何在 Python 中使用密碼安全地加密和解密字串?

Barbara Streisand
Barbara Streisand原創
2024-10-22 21:03:02262瀏覽

How to Safely Encrypt and Decrypt Strings Using Passwords in Python?

在 Python 中使用密碼安全地加密和解密字串

Python 的密碼學庫是一個用於加密和解密資料的綜合工具包。要使用密碼加密字串,您可以利用 Fernet 類,該類提供強大的加密功能,並包括時間戳記、HMAC 簽章和 Base64 編碼等基本功能。

帶密碼的 Fernet

<code class="python">from cryptography.fernet import Fernet, FernetException

password = 'mypass'  
fernet = Fernet(password.encode())

encrypted_message = fernet.encrypt(b'John Doe')
decrypted_message = fernet.decrypt(encrypted_message)

print(encrypted_message)  # Encrypted string
print(decrypted_message.decode())  # 'John Doe'</code>

Fernet 透過應用多層加密並透過 HMAC 簽章確保訊息完整性來確保加密資料的安全。

Fernet 的密碼派生金鑰產生

直接在 Fernet 中使用密碼很方便,使用密碼產生金鑰更安全。此方法涉及使用密鑰派生函數從密碼和鹽派生密鑰。

<code class="python">import secrets

from cryptography.fernet import Fernet
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC

backend = default_backend()
salt = secrets.token_bytes(16)  # Generate a unique salt
password = 'mypass'.encode()  # Convert password to bytes

kdf = PBKDF2HMAC(
    algorithm=hashes.SHA256(), length=32, salt=salt, iterations=100000,
    backend=backend
)
key = b64e(kdf.derive(password))  # Derive the secret key

fernet = Fernet(key)
encrypted_message = fernet.encrypt(b'John Doe')</code>

此方法透過使用從密碼派生的強密鑰為加密過程添加額外的保護層來增強安全性

其他加密方法

除了Fernet,您可以根據您的特定要求考慮替代方案:

Base64 模糊:對於基本混淆,可以使用base64編碼,無需加密。但是,這並不能提供任何實際的安全性,而只是模糊性。

HMAC 簽章: 如果您的目標是資料完整性,請使用 HMAC 簽章來確保資料未被竄改。

AES-GCM 加密: AES-GCM 使用 Galois/Counter 模式區塊加密來提供加密和完整性保證,類似於 Fernet,但沒有使用者友好的功能。

以上是如何在 Python 中使用密碼安全地加密和解密字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn