Implementieren der Column Permutation Encryption in Python

PythonBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie man den Column Permutation Encryption-Algorithmus in Python implementiert. Column Permutation Encryption ist eine Methode, um Klartext zu verschlüsseln, indem man die Spalten einer Matrix, die aus dem Eingabetext gebildet wird, basierend auf einem Schlüsselwort neu anordnet.

👀 Vorschau

## Beispiel 1
text = "welcometolq"; encryption_text = "ct,emlwooleq"
## Beispiel 2
text = "welcometolq "; encryption_text = "ct emlwooleq"
## Beispiel 3
text = "w"; encryption_text = ",,w,"
## Beispiel 4
text = None; encryption_text = None

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Der Grundbegriff von Column Permutation Encryption
  • Wie man den Column Permutation Encryption-Algorithmus in Python implementiert
  • Wie man den Verschlüsselungsalgorithmus mit Beispiel-Eingaben testet

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Die Prinzipien von Column Permutation Encryption zu verstehen
  • Den Column Permutation Encryption-Algorithmus in Python zu implementieren
  • Text mit der Column Permutation Encryption-Methode zu verschlüsseln und zu entschlüsseln

Verstehen Sie die Column Permutation Encryption

In diesem Schritt lernen Sie den Grundbegriff der Column Permutation Encryption und wie sie funktioniert.

Column Permutation Encryption ist eine Methode, um Klartext zu verschlüsseln, indem man ihn zeilenweise mit einer festen Anzahl von Zeichen pro Zeile schreibt (die Anzahl der einzigartigen Buchstaben im Schlüssel, der normalerweise ein Wort ohne wiederholte Buchstaben ist). Wenn die Anzahl der Zeichen in der letzten Zeile weniger als die feste Anzahl von Zeichen pro Zeile ist, werden Sonderzeichen verwendet, um die Zeile aufzufüllen und eine Matrix zu bilden. Anschließend werden die Spalten der Matrix gemäß der alphabetischen Reihenfolge der Buchstaben im Schlüssel neu angeordnet. Schließlich werden die neu angeordneten Spalten nacheinander ausgelesen, was den Chiffretext ergibt.

Nehmen wir beispielsweise folgenden Klartext, Schlüssel und Auffüllzeichen in Betracht:

Klartext: welcometolq

Schlüssel: qiao

Auffüllzeichen: ,

  1. Die Länge des Schlüssels qiao ist 4. Der Schlüssel wird dann in alphabetischer Reihenfolge der 26 englischen Buchstaben Nummern zugewiesen, wobei niedrigere Nummern Buchstaben zugewiesen werden, die früher in der Reihenfolge auftauchen. Die zugewiesenen Nummern für qiao sind 4-2-1-3.
  2. Der Klartext wird in Zeilen unterteilt, wobei jede Zeile aus 4 (der Länge des Schlüssels) Buchstaben besteht, was 4 Spalten ergibt:
1 2 3 4
w e l c
o m e t
o l q ,
  1. Da in der letzten Zeile ein Buchstabe fehlt, wird das Auffüllzeichen verwendet, um ihn zu füllen.
  2. Die Reihenfolge der Spalten in der Matrix wird gemäß der alphabetischen Reihenfolge des Schlüssels neu angeordnet:
4 2 1 3
c e w l
t m o e
, l o q
  1. Der Inhalt wird dann eine Spalte um eine Spalte ausgelesen, was den Chiffretext ergibt: ct,emlwooleq.

Implementieren Sie die Column Permutation Encryption

In diesem Schritt implementieren Sie den Column Permutation Encryption-Algorithmus in Python.

Öffnen Sie die Datei column_permutation.py und finden Sie die Funktion column_permutation_encryption(text). Diese Funktion nimmt einen Text als Eingabe entgegen, verwendet den Schlüssel qiao und das Auffüllzeichen , (Komma), um die Spaltenpermutationsverschlüsselung auf den Inhalt durchzuführen, und gibt den Chiffretext zurück.

Hier ist der Code, den Sie implementieren müssen:

def column_permutation_encryption(text: str) -> str:
    if not text:
        return None

    key = "qiao"
    padding_char = ","
    key_order = []
    sorted_key = sorted(key)
    for i in range(0, len(key)):
        key_order.append(sorted_key.index(key[i]))
    padded_text = text.ljust(len(key) * ((len(text) - 1) // len(key) + 1), padding_char)
    matrix = [
        padded_text[i : i + len(key)] for i in range(0, len(padded_text), len(key))
    ]
    encrypted_matrix = [[row[i] for i in key_order] for row in matrix]

    encryption_text: str = "".join(
        ["".join(column) for column in zip(*encrypted_matrix)]
    )
    return encryption_text

Schauen wir uns den Code Schritt für Schritt an:

  1. Zunächst überprüfen wir, ob die Eingabe text leer ist. Wenn ja, geben wir None zurück.
  2. Wir definieren den Schlüssel als "qiao" und das Auffüllzeichen als ",".
  3. Wir erstellen eine Liste key_order, um die alphabetische Reihenfolge der Buchstaben im Schlüssel zu speichern. Wir tun dies, indem wir zuerst den Schlüssel sortieren und dann den Index jedes Buchstabens im sortierten Schlüssel finden.
  4. Wir füllen den Eingabe-text mit dem Auffüllzeichen, um sicherzustellen, dass die Länge des Texts ein Vielfaches der Länge des Schlüssels ist.
  5. Wir erstellen eine Matrix aus dem aufgefüllten Text, wobei jede Zeile eine Zeile des Texts und jede Spalte ein Zeichen in der Zeile darstellt.
  6. Wir ordnen die Spalten der Matrix gemäß der zuvor berechneten key_order neu an.
  7. Schließlich lesen wir die neu angeordneten Spalten nacheinander aus und verketten sie, um den Chiffretext zu bilden.

Testen Sie die Column Permutation Encryption

Jetzt, da Sie den Column Permutation Encryption-Algorithmus implementiert haben, testen wir ihn mit einigen Beispiel-Eingaben.

Fügen Sie den folgenden Code am Ende der Datei column_permutation.py hinzu:

if __name__ == "__main__":
    txt = input()
    print(column_permutation_encryption(txt))

Dieser Code wird den Benutzer auffordern, einen Text einzugeben, und ruft dann die Funktion column_permutation_encryption() mit dem Eingabetext auf und druckt den resultierenden Chiffretext aus.

Speichern Sie die Datei und führen Sie im Terminal folgenden Befehl aus:

python3 column_permutation.py

Geben Sie einige Beispieltexte ein und beobachten Sie die resultierenden Chiffretexte. Sie können die in der ursprünglichen Herausforderung angegebenen Beispiele als Referenz verwenden:

## Beispiel 1
text = "welcometolq"
encryption_text = "ct,emlwooleq"
## Beispiel 2
text = "welcometolq "
encryption_text = "ct emlwooleq"
## Beispiel 3
text = "w"
encryption_text = ",,w,"
## Beispiel 4
text = None
encryption_text = None

Herzlichen Glückwunsch! Sie haben den Column Permutation Encryption-Algorithmus in Python erfolgreich implementiert.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben dieses Projekt abgeschlossen. Sie können in LabEx weitere Übungen absolvieren, um Ihre Fähigkeiten zu verbessern.

✨ Lösung prüfen und üben✨ Lösung prüfen und üben✨ Lösung prüfen und üben