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-02-24 22:50] – [Aufgabe 2 (Optional): Substitution] 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) | ||
| - | |||
| - | >>> | ||
| - | </ | ||
| - | |||
| - | ### 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. | ||
| - | |||
| - | Schreibe eine Funktion `substitution(klartext, | ||
| <nodisp 2> | <nodisp 2> | ||