Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:verschluesselung [2022-03-08 19:55] hofgf_informatik:verschluesselung [2022-03-30 05:07] (aktuell) hof
Zeile 1: Zeile 1:
 ====== Verschlüsselung ====== ====== Verschlüsselung ======
  
-## Caesar-Verschlüsselung+  * [[gf_informatik:verschluesselung:caesar]] 
 +  * [[gf_informatik:verschluesselung:codierung]] 
 +  * [[gf_informatik:verschluesselung:symmetrisch]] 
 +  * [[gf_informatik:verschluesselung:asymmetrisch]] 
 +  * [[gf_informatik:verschluesselung:signaturen]] 
 +  * [[gf_informatik:verschluesselung:zertifikate]] 
 +  * [[gf_informatik:verschluesselung:ziele]]
  
-Bei der Caesar-Verschlüsselung werden alle Buchstaben um eine Anzahl Stellen verrückt: 
- 
-{{ :gf_informatik:caesar.png?nolink&400 |}} 
- 
-### Aufgabe 1: Caesar-Verschlüsselung in Python 
- 
-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: 
- 
-<code python> 
-s = "Hallo KSR" 
-for buchstabe in s: 
-    print(buchstabe) 
-</code> 
- 
-Einen String in Grossbuchstaben umwandeln: 
- 
-<code python> 
-print("Hallo KSR".upper()) 
->>> HALLO KSR 
-</code> 
- 
-Alle Grossbuchstaben können in `string.ascii_uppercase` abgefragt werden. Mit [[https://docs.python.org/3/library/stdtypes.html?highlight=upper#str.find|str.find()]] können wir den Index (oder -1) finden: 
- 
-<code python> 
-import string 
- 
-for buchstabe in "HALLO": 
-    print(string.ascii_uppercase.find(buchstabe)) 
- 
->>> 
-7 
-0 
-11 
-11 
-14 
-</code> 
- 
-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 = "Z" 
-index = string.ascii_uppercase.find(klartext) 
-index += 3 
-index = index % len(string.ascii_uppercase) 
-ciphertext = string.ascii_uppercase[index] 
-print(ciphertext) 
- 
->>> C 
-</code> 
- 
-<nodisp 1> 
-++++Lösung:| 
-<code python caesar.py> 
-import string 
- 
-def caesar(text, key): 
-    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("my little secret", key) 
-print(encrypted) 
-print(caesar(encrypted, -key)) 
-</code> 
-++++ 
-</nodisp> 
- 
-### 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 1> 
-++++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, etc. 
- 
-Es gibt also $26\cdot25\cdot...\cdot2\cdot1 = 26! \approx 4\cdot10^{26}$ Möglichkeiten, die Buchstaben umzusortieren. 
-++++ 
-</nodisp> 
- 
-Schreibe eine Funktion `substitution(klartext, schluessel)`, die den so verschlüsselten Text zurückgibt. Braucht es eine separate Funktion für die Dechiffrierung? 
- 
-## 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://studio.code.org/s/frequency_analysis/lessons/1/levels/1|Chiffrat eines englischen Klartexts]] zu knacken. 
  
 <nodisp 2> <nodisp 2>
  • gf_informatik/verschluesselung.1646769334.txt.gz
  • Zuletzt geändert: 2022-03-08 19:55
  • von hof