Website-Suche

Affine-Kryptohrung mit Python


Inhaltsverzeichnis:

  1. Einführung
  2. Vorausgesetztes Wissen
  3. Affinverschlüsselungsgleichung
  4. Affine-Kryptohrung mit Python
  5. Machbarkeitstest
  6. Fazit
  7. Häufig gestellte Fragen (FAQs)

Der Affine Chiffre stellt eine spezifische Art von Substitution chiffren dar und fällt in die Kategorie der monoalphabetischen Chiffren. Im Gegensatz zur berühmteren Cäsar-Chiffre, die jeden Buchstaben im Klartext um eine feste Anzahl von drei Positionen verschiebt, verwendet die Affine Chiffre zwei Schlüssel (a und b). Bei der Auswahl der Schlüssel sollte besondere Berücksichtigung erfolgen.

Vorausgesetztes Wissen

Um das heutige Thema tiefgreifend zu verstehen, müssen Sie die folgenden Konzepte verstehen:

  • Der größte gemeinsame Teiler (ggT) & co-prime Zahl
  • Modulare Arithmetik

Diese Konzepte werden ausführlich im vorherigen Artikel mit dem Titel "Affiner Verschlüsselungsansatz" erklärt.

Affinverschlüsselungsgleichung

Lassen Sie uns mit der Formel für die Affine-Zahlenverschlüsselung beginnen:

E(x) = (a.x + b) mod m
E(x)
Bezeichnet eine Verschlüsselung des x-alphabetischen Index
a
Ein Indexwert des “spezial” ersten Schlüssels
x
Ein Indexwert des einfachen Buchstabens
b
Ein Indexwert des zweiten Schlüssels (zusätzlicher Shiftwert)
mod m
Die Modulo-Operationen des Gesamtelements des Alphabets, das 26 ist.

Alt-Bild & Bildunterschrift: Affine-Chiffre-Gleichung

Zum Beispiel möchten wir den Klartext „BIMANDO“ mit den Schlüsseln 7 und 13 verschlüsseln. Unter Verwendung des folgenden Tabellenindex wandeln wir zuerst den Klartext in die entsprechenden Zahlen um:

Alt-Bild & Beschriftung: Indexnummerierung

Der “BIMANDO ” Klartext wird in eine Indizierungsnummer umgewandelt zu “1 8 12 0 13 3 14 ”.

Alt-Bild & Beschriftung: Wandeln Sie einen Klartext in einen Indexnummernwert um

Dann wenden wir die Gleichungsberechnung an, und das Ergebnis wird wie folgt angezeigt:

Alt-Bild & Bildunterschrift: Affine Verschlüsselung

Also wird der “BIMANDO ” Klartext mit dem Affine-Chiffre unter Verwendung der Schlüssel 7 und 13 verschlüsselt, was zu “URTNAIH ” führt.

Affine-Kryptohrung mit Python

Jetzt nehmen wir an, wir wollen eine vertrauliche Nachricht senden, die eine Menge Absätze enthält. Die manuelle Durchführung der Affine-Chiffre-Verschlüsselung erfordert viel Aufwand und Zeit und hat eine hohe Wahrscheinlichkeit für Fehlberechnungen, richtig? Daher benötigen wir ein Programm, das den Prozess der Affine-Chiffre-Verschlüsselung automatisiert. Im Folgenden ist der Schritt-für-Schritt-Prozess zur Erstellung eines Python-Programms:

1. Importieren Sie die erforderlichen Bibliotheken
Unser Programm beginnt mit dem Import der notwendigen Module wie argparse, string und os für das Parsen von Befehlszeilenargumenten, String-Operationen und Betriebssystem-bezogene Funktionalität.

import argparse
import string
import os

2. Definieren der Alphabetzuordnung
Dann definieren wir das Alphabet als eine Zeichenkette aus Kleinbuchstaben des englischen Alphabets. Dies wird später zum Zuordnen der Zeichen während des Verschlüsselungsprozesses verwendet.

alphabet = string.ascii_lowercase

3. Affine-Ziffernverschlüsselungsfunktion
Dies ist die Kernfunktion unseres Programms. Sie nimmt den Eingabetext und zwei Schlüssel, „a“ und „b“, und wendet die Affine-Ziffernverschlüsselung auf den Text an, während die Struktur des Textes erhalten bleibt.

def affine_cipher_encryption(text, a, b):

    encrypted_text = ""     for char in text:

        if char.lower() in alphabet:

            if char.isupper():

                encrypted_text += chr(((a * (ord(char.lower()) - 97) + b) % 26) + 65)             else:

                encrypted_text += chr(((a * (ord(char) - 97) + b) % 26) + 97)         else:

4. Bedingte Hauptüberprüfung
In diesem Blockcode überprüfen wir, ob er als Hauptprogramm ausgeführt wird. Es wird der Argumentparser mit Beschreibungen für das Skript und seine Argumente eingerichtet. Das erforderliche Argument ist nur ein Pfad zu einer Textdatei. Wenn wir den Ausgabepfad nicht angeben, möchten wir, dass standardmäßig der Name der Eingabedatei mit „_encrypted“ angehängt wird. Für das Argument „keys“ möchten wir es im Format „a,b“ haben. Wenn wir es jedoch festlegen, ist der Standardwert 5 und 8.

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description="Affine Cipher Encryption from a text file")     parser.add_argument("input_file", help="Path to the input text file")     parser.add_argument("-k", "--keys", type=str, default="5,8", help="Keys for the Affine Cipher in the format 'a,b'")     args = parser.parse_args()     a, b = map(int, args.keys.split(','))     with open(args.input_file, "r") as file:

        text = file.read()     # Extract the file name from the input file path     input_filename, extension = os.path.splitext(args.input_file)     default_output_file = input_filename + "_encrypted" + extension     # Encrypt the text using the affine cipher     encrypted_text = affine_cipher_encryption(text, a, b)     # Write the encrypted text to a new file     with open(default_output_file, "w") as file:

        file.write(encrypted_text)

Schließlich, sobald die Verschlüsselungsfunktion abgeschlossen ist, wird unser Programm die Ausgabe mit der gleichen Dateierweiterung wie die Eingabedatei speichern.

Speichern Sie es jetzt als „affine_cipher.py“. Führen Sie das Programm jetzt aus, indem Sie den folgenden Befehl eingeben:

python affine_cipher.py -h

Wenn Sie keinen Fehler finden, sieht die Ausgabe wie das folgende Bild aus:

Alt-Bild & Bildunterschrift: Affine-Chiffre Python-Programm

Machbarkeitstest

Wir haben eine vertrauliche Nachricht mit dem folgenden Namen „message.txt“, und wir möchten sie an unsere Mitglieder verbreiten:

Alt-Bild & Beschriftung: Klartext

Also verwenden wir das Programm, das wir erstellt haben, bevor wir diese Nachricht mit dem Affine-Ziffernverfahren unter Verwendung der Schlüssel 3 und 7 verschlüsseln wollen. Der Befehl lautet wie folgt:

python affine_cipher.py message.txt -k 3,7

Alt-Bild & Bildunterschrift: Affine-Chiffre Python-Programm

Mit der Geschwindigkeit eines Augenblicks wird die verschlüsselte Nachricht erfolgreich erstellt und in “message_encrypted.txt” gespeichert. Lassen Sie uns überprüfen, wie die Nachricht aussieht:

Alt-Bild & Bildunterschrift: Affine Ciphertext

Wie Sie sehen können, ist die Nachricht durcheinander geraten. Nur unsere Mitglieder, die die Chiffriermethode und ihre Schlüssel kennen, können die Nachricht entschlüsseln.

Versuche es selbst

Laden Sie den Quellcode dieses Programms auf unserer GitHub-Seite unter https://github.com/bimando/Affine-Cipher herunter.

Fazit

Zusammenfassend bietet die Affine-Chiffre-Verschlüsselungsmethode, eine Form der monoalphabetischen Substitution, verbesserte Sicherheit durch die Verwendung von zwei Schlüsseln, was eine sorgfältige Überlegung bei der Schlüsselauswahl erfordert. Das Verständnis von Konzepten wie dem größten gemeinsamen Teiler (ggT), teilerfremden Zahlen und modularer Arithmetik ist entscheidend, um die Feinheiten der Affine-Chiffre zu begreifen.

Die Affine-Chiffre-Gleichung E(x)=(a.x + b) mod m dient als grundlegendes Werkzeug für die Verschlüsselung, wobei "a" und "b" die Schlüssel darstellen und "x" den Index des Klartextbuchstabens symbolisiert. Die Implementierung eines automatisierten Python-Programms für den Verschlüsselungsprozess der Affinen Chiffre wurde demonstriert, um die großen Verschlüsselungsaufgaben effizient zu rationalisieren. Das Programm umfasst die Schlüssel-Funktionalitäten wie den Import von Bibliotheken, die Alphabetzuordnung, eine Verschlüsselungsfunktion und das Parsen von Kommandozeilenargumenten für Ein- und Ausgabepfade. Besonders hervorzuheben ist, dass das Skript die Standardeinstellungen für die Schlüssel und Ausgabedateinamen ermöglicht, um einen nahtlosen Verschlüsselungsprozess zu erleichtern.

Häufig gestellte Fragen (FAQs)

Q1: Was ist die Affine-Chiffre und wie unterscheidet sie sich von der Caesar-Chiffre?

A1: Der Affine Chiffre ist eine Art von monoalphabetischer Substitutionschiffre, die zwei Schlüssel, "a" und "b", für die Verschlüsselung verwendet. Im Gegensatz dazu verwendet die Caesar-Chiffre eine feste Verschiebung von drei Positionen für jeden Buchstaben im Klartext.

Q2. Was sind die Voraussetzungen für das Verständnis des Affinen Ziphers?

A2: Um die Affine Chiffre gründlich zu verstehen, ist es entscheidend, ein Verständnis für Konzepte wie den größten gemeinsamen Teiler (ggT), co-prime Zahlen und modulare Arithmetik zu haben.

Q3: Wie kann ich eine Nachricht mit der affinen Chiffre in Python verschlüsseln?

A3: Um den Verschlüsselungsprozess des Affine-Chiffriers zu automatisieren, können Sie das im Artikel beschriebene Python-Programm nutzen. Das Programm verschlüsselt große Textmengen effizient und vereinfacht das Verschlüsselungsverfahren. Der Artikel bietet eine Schritt-für-Schritt-Anleitung zum Importieren der Bibliotheken, zur Definition der Alphabetzuordnung, zur Erstellung der Verschlüsselungsfunktion und zum Parsen der Befehlszeilenargumente für Eingabe- und Ausgabepfade.