Seite 1 von 1

Caesar-Verschlüsselung: ohne Schlüssel entschlüsseln (alle 25 Varianten) und verschlüsseln (mit Schlüssel)

Verfasst: Mittwoch 26. Mai 2021, 17:16
von r95m
Hallo zusammen,

ich lerne gerade Python und habe eine Aufgabe mit der Caesar-Verschlüsselung.

Dabei soll zuerst gefragt werden, ob ein Text ver- oder entschlüsselt werden soll. Wenn er entschlüsselt werden soll, sollen alle 25 Varianten untereinander aufgelistet werden mit dem Schlüssel der Rotation, da der Schlüssel für die Rotation nicht bekannt ist. Soll verschlüsselt werden, wird mit einem bekannten Schlüssel das Wort regulär verändert werden.
Für beide Vorgänge sollen nur die Buchstaben aus dem englischen Alphabet verdreht werden, andere Zeichen sollen bestehen bleiben. Groß- und Kleinbuchstaben sollen groß bzw. klein bleiben. Außerdem soll man bei der Rotation auf ASCII zurückgreifen.

Für die Aufgabe habe ich angefangen einen Code zu schreiben, komme aber u.a. bei der Systematik alle 25 Varianten auszugeben nicht weiter.

Code: Alles auswählen

verschluesselung = int(input("Der Text ist verschluesselt ja(1), nein(0): "))

geheimtext = ""

def caesar(plain:str, rot:int): -> str
    
    if verschluesselung == 1
        
        for a in caesar
            
            wort_als_zahl = ord(a)
            
            neues_wort_als_zahl = wort_als_zahl + rot
            
    else
    

#caesar(plain = str(input("Wie ist der Klartext: ")), rot = range(1,25))
https://i.postimg.cc/prDJS9bq/Bildschir ... -18-50.png

Hat dafür jemand eine Idee wie man es lösen könnte?

Herzlichen Dank!

Re: Caesar-Verschlüsselung: ohne Schlüssel entschlüsseln (alle 25 Varianten) und verschlüsseln (mit Schlüssel)

Verfasst: Mittwoch 26. Mai 2021, 18:54
von __blackjack__
@r95m: Bitte ernsthaft versuchen und hier nicht Quelltext abkippen der ganz offensichtlich kein gültiges Python ist und deshalb nicht einmal am Compiler vorbei kommt.

Und wenn Du das korrigiert hast, dass das mindestens mal am Compiler vorbei kommt, dann verrate mal was die Typprüfung die Du verwendest beispielsweise zu den Argumenten sagt wenn Du beim Aufruf am Ende das Kommentarzeichen entfernst. Sollte die von Dir verwendete Software zur Typprüfung dazu nichts sagen, weil Du so etwas nicht verwendet, dann hör bitte auf Typannotationen zu schreiben, denn dann nützen die nichts wenn man sich weder darauf verlassen kann das die auch tatsächlich stimmen, und Du die auch nicht verwendest um auf Fehler hingewiesen zu werden.

Funktionen sollten alles was sie ausser Konstanten benötigen als Argument(e) übergeben bekommen. `verschlüsselung` kommt aber einfach so aus der Umgebung. Letztlich ist das aber auch ein Wert den man nicht zwingend braucht, denn etwas das mit einer Verschiebung von n verschlüsselt wurde, kann mit einer Verschiebung von -n wieder entschlüsselt werden.

`plain` ist kein guter Name weil gar nicht gesagt ist, dass da Klartext („plaintext“) übergeben wird, denn zum Entschlüsseln nimmt man ja die gleiche Funktion und übergibt dort auch den verschlüsselten Text mit einem entsprechenden Verschiebungswert.

Eine einfache Umsetzung wäre es aus dem Verschiebungswert eine Ersetzungstabelle zu erstellen, mit Hilfe von `str.maketrans()` und die mit der `translate()`-Methode von Zeichenketten anzuwenden. Beim erstellen dieser Tabelle kann man auf `string.ascii_lowercase` und `string.ascii_uppercase` zurückgreifen, und sich entweder überlegen wie man über den ASCII-Wert eines Zeichens mit Addition, Subtraktion, und Modulo-Rechnung das dazugehörige verschobene Zeichen berechnen kann, oder man überlegt wie man eine Zeichenkette erstellen kann, aus der man das verschobene Alphabet per „slicing“-Notation erstellen kann. Umrechnen zwischen ASCII-Wert und ASCII-Zeichen lässt sich mit den Funktionen `chr()` und `ord()`.