Verschlüsseln und Entschlüsseln mit PyCrypto AES-256
Um effiziente Verschlüsselungs- und Entschlüsselungsfunktionen mit PyCrypto zu erstellen, die mit einer Nachricht und einem Schlüssel arbeiten, Bestimmte Überlegungen müssen berücksichtigt werden.
Schlüsselausrichtung und Entropie:
Es ist wichtig sicherzustellen, dass der bereitgestellte Schlüssel die erwartete Länge hat. PyCrypto empfiehlt die Verwendung eines starken Schlüssels mit einer Länge von 32 Bytes. Um dies zu erreichen, hashen Sie den Schlüssel mit SHA-256 und verwenden Sie den resultierenden Digest als Verschlüsselungsschlüssel.
Verschlüsselungsmodi:
Für AES-Verschlüsselung Cipher Block Chaining ( Der CBC-Modus wird üblicherweise verwendet. Es bietet zusätzliche Sicherheit, indem aufeinanderfolgende Chiffretextblöcke mit einem Initialisierungsvektor (IV) kombiniert werden.
Initialisierungsvektor (IV):
Der IV ist ein Zufallswert wird bei der Verschlüsselung dem Geheimtext vorangestellt. Es stellt die Einzigartigkeit jeder verschlüsselten Nachricht sicher und verhindert, dass Angreifer Muster im Chiffretext nutzen. Sie können unterschiedliche IVs für die Verschlüsselung und Entschlüsselung bereitstellen, es ist jedoch wichtig, für jeden Verschlüsselungsvorgang einen eindeutigen IV zu verwenden.
Implementierung:
Die folgende Beispielimplementierung berücksichtigt diese Überlegungen :
import base64 import hashlib from Crypto import Random from Crypto.Cipher import AES class AESCipher(object): def __init__(self, key): self.bs = AES.block_size self.key = hashlib.sha256(key.encode()).digest() def encrypt(self, raw): raw = self._pad(raw) iv = Random.new().read(AES.block_size) cipher = AES.new(self.key, AES.MODE_CBC, iv) return base64.b64encode(iv + cipher.encrypt(raw.encode())) def decrypt(self, enc): enc = base64.b64decode(enc) iv = enc[:AES.block_size] cipher = AES.new(self.key, AES.MODE_CBC, iv) return AESCipher._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8') def _pad(self, s): return s + (self.bs - len(s) % self.bs) * chr(self.bs - len(s) % self.bs) @staticmethod def _unpad(s): return s[:-ord(s[len(s)-1:])]
Diese Implementierung stellt sicher, dass der Schlüssel sicher auf 32 Bytes gehasht wird, den CBC-Modus für die Verschlüsselung verwendet und während der Verschlüsselung einen zufälligen IV generiert. Die Entschlüsselungsfunktion stellt den IV aus dem Chiffretext wieder her und verwendet ihn, um den Verschlüsselungsprozess umzukehren.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine sichere AES-256-Verschlüsselung und -Entschlüsselung in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!