Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
gf_informatik:verschluesselung [2022-03-08 19:54] – [Ein paar Tipps] hof | gf_informatik:verschluesselung [2022-03-30 05:07] (aktuell) – hof | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Verschlüsselung ====== | ====== Verschlüsselung ====== | ||
- | ## Caesar-Verschlüsselung | + | * [[gf_informatik: |
+ | * [[gf_informatik: | ||
+ | * [[gf_informatik: | ||
+ | * [[gf_informatik: | ||
+ | * [[gf_informatik: | ||
+ | * [[gf_informatik: | ||
+ | * [[gf_informatik: | ||
- | Bei der Caesar-Verschlüsselung werden alle Buchstaben um eine Anzahl Stellen verrückt: | ||
- | |||
- | {{ : | ||
- | |||
- | ### Aufgabe 1: Caesar-Verschlüsselung in Python | ||
- | |||
- | Schreibe eine Funktion `caesar(klartext, | ||
- | * 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: | ||
- | |||
- | <code python> | ||
- | s = "Hallo KSR" | ||
- | for buchstabe in s: | ||
- | print(buchstabe) | ||
- | </ | ||
- | |||
- | Einen String in Grossbuchstaben umwandeln: | ||
- | |||
- | <code python> | ||
- | print(" | ||
- | >>> | ||
- | </ | ||
- | |||
- | Alle Grossbuchstaben können in `string.ascii_uppercase` abgefragt werden. Mit [[https:// | ||
- | |||
- | <code python> | ||
- | import string | ||
- | |||
- | for buchstabe in " | ||
- | 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: | ||
- | <code python> | ||
- | import string | ||
- | |||
- | klartext = " | ||
- | index = string.ascii_uppercase.find(klartext) | ||
- | index += 3 | ||
- | index = index % len(string.ascii_uppercase) | ||
- | ciphertext = string.ascii_uppercase[index] | ||
- | print(ciphertext) | ||
- | |||
- | >>> | ||
- | </ | ||
- | |||
- | <nodisp 1> | ||
- | ++++Lösung: | ||
- | <code python caesar.py> | ||
- | import string | ||
- | |||
- | def caesar(text, | ||
- | ciphertext = "" | ||
- | for letter in text.upper(): | ||
- | index = string.ascii_uppercase.find(letter) | ||
- | if index != -1: # -1 means not found | ||
- | index = index + key | ||
- | index = index % len(string.ascii_uppercase) | ||
- | letter = string.ascii_uppercase[index] | ||
- | ciphertext = ciphertext + letter | ||
- | return ciphertext | ||
- | |||
- | key = 17 | ||
- | encrypted = caesar(" | ||
- | print(encrypted) | ||
- | print(caesar(encrypted, | ||
- | </ | ||
- | ++++ | ||
- | </ | ||
- | |||
- | ### Aufgabe 2 (Optional): Substitution | ||
- | 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? | ||
- | |||
- | <nodisp 2> | ||
- | ++++Lösung| | ||
- | Für den ersten Buchstaben A können wir unter 26 Möglichkeiten auswählen, um ihn umzuplatzieren. Für B bleiben noch 25, für C 24 Möglichkeiten, | ||
- | |||
- | Es gibt also $26\cdot25\cdot...\cdot2\cdot1 = 26! \approx 4\cdot10^{26}$ Möglichkeiten, | ||
- | ++++ | ||
- | </ | ||
- | |||
- | Schreibe eine Funktion `substitution(klartext, | ||
- | |||
- | ## Häufigkeitsanalyse. | ||
- | |||
- | 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: | ||
- | * Klartext-Sprache muss bekannt sein oder vermutet werden. | ||
- | * Chiffrat muss genügend lang sein. | ||
- | ++++ | ||
- | |||
- | ### Aufgabe 3: Monoalphabetische Substitution knacken mit Häufigkeitsanalyse. | ||
- | |||
- | Versuchen Sie, das [[https:// | ||
<nodisp 2> | <nodisp 2> |