Verschlüsselung

Bei der Caesar-Verschlüsselung werden alle Buchstaben um eine Anzahl Stellen verrückt:

Schreibe eine Funktion caesar(klartext, n), die die Cäsar-Verschlüsselung umsetzt.

  • Gebe nur Grossbuchstaben aus.
  • Zeichen, die keine Buchstaben sind, sollen nicht verändert werden.
  • Wie kannst du das Chiffrat (den Ciphertext) entschlüsseln?

Ein paar Tipps

Du kannst über die Buchstaben eines Strings laufen wie über die Elemente einer Liste:

s = "Hallo KSR"
for buchstabe in s:
    print(buchstabe)

Einen String in Grossbuchstaben umwandeln:

print("Hallo KSR".upper())
>>> HALLO KSR

Alle Grossbuchstaben können in string.ascii_uppercase abgefragt werden. Mit str.find() können wir den Index (oder -1) finden:

import string
 
for buchstabe in "HALLO":
    print(string.ascii_uppercase.find(buchstabe))
 
>>>
7
0
11
11
14

Der Modulo-Operator % gibt uns den Rest der Ganzzahl-Division zurück. Das ist praktisch, um den Index wieder bei A starten zu lassen, wenn er grösser als Z wird:

import string
 
klartext = "Z"
index = string.ascii_uppercase.find(klartext)
index += 3
index = index % len(string.ascii_uppercase)
ciphertext = string.ascii_uppercase[index]
print(ciphertext)
 
>>> C

Lösung:

Statt einer fixen Verschiebung soll jeder Buchstabe durch einen beliebigen anderen ersetzt werden. Der Schlüssel ist also nicht mehr einfach eine Zahl n, sondern ein String mit Länge 26, der für jeden Buchstaben A-Z dessen Entsprechung enthält.

Wie gross ist der Schlüsselraum der monoalphabetischen Substitution?

Lösung

Schreibe eine Funktion substitution(klartext, schluessel), die den so verschlüsselten Text zurückgibt. Braucht es eine separate Funktion für die Dechiffrierung?

Nicht alle Buchstaben kommen gleich oft vor in einer Sprache. Dies können wir nutzen, indem wir das Buchstabe-Histogramm des Chiffrats mit dem der vermuteten Klartext-Sprache vergleichen.

Was sind die Probleme und Voraussetzungen?

Lösung:

Versuchen Sie, das Chiffrat eines englischen Klartexts zu knacken.

  • gf_informatik/verschluesselung.1646769334.txt.gz
  • Zuletzt geändert: 2022-03-08 19:55
  • von hof