Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man eine sichere AES-256-Verschlüsselung und -Entschlüsselung in Python?

Wie implementiert man eine sichere AES-256-Verschlüsselung und -Entschlüsselung in Python?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-21 07:17:09175Durchsuche

How to Implement Secure AES-256 Encryption and Decryption in Python?

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!

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