Heim >Backend-Entwicklung >Python-Tutorial >Wie verschlüssele und entschlüssele ich Strings mithilfe von Passwörtern in Python sicher?

Wie verschlüssele und entschlüssele ich Strings mithilfe von Passwörtern in Python sicher?

Barbara Streisand
Barbara StreisandOriginal
2024-10-22 21:03:02268Durchsuche

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

Sicheres Verschlüsseln und Entschlüsseln von Zeichenfolgen mit Passwörtern in Python

Die Kryptografiebibliothek von Python ist ein umfassendes Toolkit zum Ver- und Entschlüsseln von Daten. Um Zeichenfolgen mit einem Passwort zu verschlüsseln, können Sie die Fernet-Klasse nutzen, die eine robuste Verschlüsselung bietet und wichtige Funktionen wie einen Zeitstempel, eine HMAC-Signatur und Base64-Kodierung enthält.

Fernet mit Passwort

<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 schützt verschlüsselte Daten, indem es mehrere Verschlüsselungsebenen anwendet und die Nachrichtenintegrität mit einer HMAC-Signatur gewährleistet.

Passwortbasierte Schlüsselgenerierung für Fernet

Während die Verwendung eines Passworts direkt mit Fernet praktisch ist ist es sicherer, einen Schlüssel mithilfe eines Passworts zu generieren. Bei diesem Ansatz wird mithilfe einer Schlüsselableitungsfunktion ein geheimer Schlüssel aus dem Passwort und dem Salt abgeleitet.

<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>

Diese Methode erhöht die Sicherheit, indem sie dem Verschlüsselungsprozess eine zusätzliche Schutzebene mit einem starken, aus Ihrem Passwort abgeleiteten Schlüssel hinzufügt und ein einzigartiges Salz.

Andere Verschlüsselungsansätze

Über Fernet hinaus können Sie je nach Ihren spezifischen Anforderungen Alternativen in Betracht ziehen:

Base64 Obscuring: Für Basic Verschleierung, Base64-Kodierung kann ohne Verschlüsselung verwendet werden. Dies bietet jedoch keine wirkliche Sicherheit, sondern nur Unklarheit.

HMAC-Signatur: Wenn Ihr Ziel die Datenintegrität ist, verwenden Sie HMAC-Signaturen, um sicherzustellen, dass die Daten nicht manipuliert wurden.

AES-GCM-Verschlüsselung: AES-GCM verwendet die Galois/Counter-Mode-Blockverschlüsselung, um sowohl Verschlüsselung als auch Integritätsgarantien zu bieten, ähnlich wie Fernet, jedoch ohne dessen benutzerfreundliche Funktionen.

Das obige ist der detaillierte Inhalt vonWie verschlüssele und entschlüssele ich Strings mithilfe von Passwörtern in Python sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn