Seite 1 von 1

Verschlüsselung / Geheimsprache

Verfasst: Dienstag 30. November 2021, 16:12
von andieseul
Hallo, alle miteinander,
Ich habe folgende Aufgabe gestellt bekommen:

Sie und Ihr bester Freund/Ihre beste Freundin möchten den Inhalt Ihrer Nachrichten (auf den ersten Blick) unlesbar machen. Um dies zu erreichen, haben Sie sich folgendes Verfahren ausgedacht. Jeden Morgen sehen Sie sich und einigen sich auf eine Zahl (ein Integer). Sie verwenden die ASCII-Tabelle (siehe unten) und verschieben jedes Zeichen Ihrer Nachricht um die vereinbarte Zahl. Allerdings beschränken Sie sich nur auf die Zeichen der Tabelle zwischen (*beide Randwerte eingeschlossen*) den Indizes *33* und *126*.

**Aufgabe:** Schreiben Sie eine Funktion, die den ursprünglichen Satz und die Zahl, auf die Sie sich geeinigt haben, als Argumente nimmt. Die Funktion soll diesen Satz "verschlüsseln", indem sie jedes Zeichen um die angegebene Zahl verschiebt. Dabei bezieht sich das Verschieben auf den entsprechenden Index eines Zeichens in der ASCII Tabelle. Der Rückgabewert Ihrer Funktion ist der "verschlüsselte" Satz (ein String). *Sie können davon ausgehen, dass alle Sätze nur Symbole enthalten, die in der unten stehenden ASCII-Tabelle enthalten sind.*

Wie bereits erwähnt, basiert die Kodierung auf der ASCII-Tabelle und ist auf die Zeichen zwischen Index 33 ('!') und Index 126 ('~') beschränkt. Die Verschiebung des Zeichens 'y' um 10 ergibt zum Beispiel '%'. **Alle Zeichen, die nicht in diesem Bereich enthalten sind (z. B. Leerzeichen), sollen unverändert in den neuen Satz übernommen werden.**

Pythons eingebaute Funktionen [`ord()`](https://www.geeksforgeeks.org/ord-function-python/) und [`chr()`](https://www.geeksforgeeks.org/chr-in-python/) sind sehr hilfreich bei der Umwandlung von Zeichen in die entsprechenden (ASCII) Dezimalzahlen (Indices) und umgekehrt. Sie können und sollen diese Funktionen verwenden, um diese Aufgabe zu lösen!

Folgendes habe ich dann versucht:

code = input("Code: ")
shift = int(input("Verschiebungsfaktor: "))
encoded = "".join(chr((ord(char) + shift) %
print("Verschlüsselter Code:", encoded)

Ich bekomme dann folgende Fehlermeldung:
File "C:\Users\Andie La Seule\PycharmProjects\testProjekt\main.py", line 5

^
SyntaxError: unexpected EOF while parsing

Process finished with exit code 1

Was mache ich falsch?

Viele Grüße von einer absoluten Anfängerin

Re: Verschlüsselung / Geheimsprache

Verfasst: Dienstag 30. November 2021, 16:19
von __deets__
In der Zeile die mit encoded beginnt hast du einen Fehler.

Nachtrag: ich weiss nicht so genau, wass du da erreichen willst, darum ist das alles, was ich da sagen kann.

Re: Verschlüsselung / Geheimsprache

Verfasst: Dienstag 30. November 2021, 17:26
von andieseul
Okay.... Ist der Punkt der Fehler?
Ich möchte eine Funktion schreiben, die unter bestimmten Vorgaben, Text verschlüsselt und auch wieder entschlüsselt. Ich weiß einfach nicht, wie ich das machen soll. Völliges Blackout.
Aber lieben Dank für Deine Antwort....

Re: Verschlüsselung / Geheimsprache

Verfasst: Dienstag 30. November 2021, 17:48
von pillmuncher
@: Wenn du eine Klammer aufmachst, musst du sie auch wieder schließen. Insbesondere bedeutet das, dass die Anzahl der schließenden Klammern gleich der öffnenden sein muss.

Re: Verschlüsselung / Geheimsprache

Verfasst: Dienstag 30. November 2021, 18:41
von andieseul
pillmuncher hat geschrieben: Dienstag 30. November 2021, 17:48 @: Wenn du eine Klammer aufmachst, musst du sie auch wieder schließen. Insbesondere bedeutet das, dass die Anzahl der schließenden Klammern gleich der öffnenden sein muss.
Okay....alles klar. Danke. Mal sehen, wie ich da weiter komme :roll:

Re: Verschlüsselung / Geheimsprache

Verfasst: Donnerstag 2. Dezember 2021, 20:52
von Caskuda
In der Zeile "encoded" fehlte das Durchlaufen der einzelnen Buchstaben der zu verschlüsselnden Nachricht:

Code: Alles auswählen

msg = input("Code: ")
shift = int(input("Verschiebungsfaktor: "))
encoded = ''.join([chr(ord(char)+shift) for char in msg])
print("Verschlüsselter Code:", encoded)
Nach Aufgabenstellung bildet "y" bei Verschiebung um 10 auf "%" ab; Erhält man einen Index der größer als 126 ist, sollte man somit wieder am Anfang des Bereichs 33 anfangen nach dem richtigen Zeichen zu suchen.
Als Denkanstoß ist hier die Division mit Rest, in Python der Operator mod, zu nennen.