Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:daten_sca:verschluesselung [2026-03-30 09:27] – [Zusatzaufgaben] sca | gf_informatik:daten_sca:verschluesselung [2026-05-11 11:55] (aktuell) – [Auftrag] sca | ||
|---|---|---|---|
| Zeile 197: | Zeile 197: | ||
| Die Nachricht " | Die Nachricht " | ||
| + | |||
| + | Der Code kann ganz einfach gehalten werden, es muss z.B. keine Funktion geschrieben werden. | ||
| ++++Tipps| | ++++Tipps| | ||
| Zeile 460: | Zeile 462: | ||
| Mögliche Vorgehensweisen: | Mögliche Vorgehensweisen: | ||
| - | 1. **Einfach.** Idee: Gehe jeden Buchstabe des Alphabets durch und ermittle, wie oft dieser im Text vorkommt. | + | 1. **Einfach.** Idee: Gehe jeden Buchstabe des Alphabets |
| 1. Speichere das Alphabet in einer Liste oder einem String, z.B. `alphabet = " | 1. Speichere das Alphabet in einer Liste oder einem String, z.B. `alphabet = " | ||
| 1. Für jeden Buchstaben musst du irgendwo dessen Anzahl speichern. Verwende dazu eine Liste: Die erste Zahl darin steht für die Anzahl " | 1. Für jeden Buchstaben musst du irgendwo dessen Anzahl speichern. Verwende dazu eine Liste: Die erste Zahl darin steht für die Anzahl " | ||
| Zeile 466: | Zeile 468: | ||
| count = [0, | count = [0, | ||
| </ | </ | ||
| - | 1. Mit `text.count(buchstabe)` wird ermittelt, wie oft der Buchstabe `buchstabe` im Text `text` vorkommt. | + | |
| + | | ||
| 1. Gehe jeden Buchstabe in `alphabet` durch (Schleife!) und ermittle mit `count` dessen Anzahl. Speichere diese dann in der `count`-Liste. Nun sollte diese Liste für jeden Buchstaben die richtige Anzahl haben. | 1. Gehe jeden Buchstabe in `alphabet` durch (Schleife!) und ermittle mit `count` dessen Anzahl. Speichere diese dann in der `count`-Liste. Nun sollte diese Liste für jeden Buchstaben die richtige Anzahl haben. | ||
| 1. Ermittle, wie viele Buchstaben es insgesamt gibt (also Summe aller Zahlen in `count`). Dividiere jede Zahl in `count` durch diese Summe, um dessen Häufigkeit zu erhalten (sollte etwa $0.15$ für das " | 1. Ermittle, wie viele Buchstaben es insgesamt gibt (also Summe aller Zahlen in `count`). Dividiere jede Zahl in `count` durch diese Summe, um dessen Häufigkeit zu erhalten (sollte etwa $0.15$ für das " | ||
| 1. Gib nun jeden Buchstaben und dessen Häufigkeit aus.\\ \\ | 1. Gib nun jeden Buchstaben und dessen Häufigkeit aus.\\ \\ | ||
| - | 1. **Standard.** Idee: Gehe jedes Zeichen des Textes durch, | + | 1. **Standard.** Idee: Gehe jedes Zeichen des Textes durch. Ermittle zuerst, um welches Zeichen sich handelt (Position im Alphabet). Erhöhe |
| 1. Speichere das Alphabet in einer Liste oder einem String, z.B. `alphabet = " | 1. Speichere das Alphabet in einer Liste oder einem String, z.B. `alphabet = " | ||
| 1. Für jeden Buchstaben musst du irgendwo dessen Anzahl speichern. Verwende dazu eine Liste: Die erste Zahl darin steht für die Anzahl " | 1. Für jeden Buchstaben musst du irgendwo dessen Anzahl speichern. Verwende dazu eine Liste: Die erste Zahl darin steht für die Anzahl " | ||
| Zeile 587: | Zeile 590: | ||
| <code python> | <code python> | ||
| import unicodedata | import unicodedata | ||
| + | import hashlib | ||
| + | |||
| ALPHABET = " | ALPHABET = " | ||
| ################################### | ################################### | ||
| + | |||
| key = #TODO: HIER MUSS DER KEY FESTGELEGT WERDEN | key = #TODO: HIER MUSS DER KEY FESTGELEGT WERDEN | ||
| ################################### | ################################### | ||
| + | |||
| + | # key check using hashes | ||
| + | keys_hashed = [' | ||
| + | if not hashlib.sha256(key.encode()).hexdigest() in keys_hashed: | ||
| + | raise Exception(' | ||
| for c in key: | for c in key: | ||
| if c not in ALPHABET: raise Exception(" | if c not in ALPHABET: raise Exception(" | ||
| + | |||
| def encryption_vigenere(cleartext, | def encryption_vigenere(cleartext, | ||
| cleartext = cleartext.replace(' | cleartext = cleartext.replace(' | ||
| Zeile 632: | Zeile 642: | ||
| </ | </ | ||
| ++++ | ++++ | ||
| + | |||
| + | <nodisp 2> | ||
| + | |||
| + | ++++LEHRER INFO WICHTIG!| | ||
| + | |||
| + | Die hashed PW müssen jeweils angepasst werden! | ||
| + | |||
| + | Code dafür: | ||
| + | |||
| + | <code python> | ||
| + | import hashlib | ||
| + | |||
| + | text = " | ||
| + | |||
| + | pws = [' | ||
| + | |||
| + | for text in pws: | ||
| + | hashed = hashlib.sha256(text.encode()).hexdigest() | ||
| + | print(hashed) | ||
| + | </ | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | </ | ||
| + | |||
| + | === Auftrag === | ||
| + | |||
| + | ++++Vorbereitung LP| | ||
| + | |||
| + | 1. keys ausdenken, immer 1 key pro 4-5 SuS | ||
| + | 1. auf Zetteli schreiben | ||
| + | 1. hashes in Code anpassen (überprüft, | ||
| + | 1. Teams-Chat erstellen | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | |||
| + | Vorbereitung SuS: | ||
| + | |||
| + | 1. Schotte dich ab: Einzeln sitzen, Kopfhörer | ||
| + | 1. Kopiere Vigenere-Code von oben in Browser. | ||
| + | 1. Jede Person kriegt von LP einen geheimen key. Keep it private! | ||
| + | 1. Tippe key in Code: `key = ...`. Führe Code aus. Falls kein Fehler, ist key korrekt! | ||
| + | |||
| + | |||
| + | Durchführung | ||
| + | |||
| + | Ziele: | ||
| + | |||
| + | * Jeweils 4-5 Personen bilden eine Gruppe und haben das gleiche Passwort. | ||
| + | * Schreibe verschlüsselte Nachrichten im Chat. | ||
| + | * Finde alle Gruppenmitglieder. | ||
| + | * Dann löst Rätsel (-> Slides) | ||
| + | * Dann plaudert in der Gruppe miteinander: | ||
| + | * Witz erzählen! | ||
| + | * Ferienpläne diskutieren. | ||
| + | * ... | ||
| + | |||
| + | |||
| + | Regeln: | ||
| + | |||
| + | * NUR VERSCHLÜSSELT KOMMUNIZIEREN! | ||
| ===== - Zeichencodierung ===== | ===== - Zeichencodierung ===== | ||
| Zeile 989: | Zeile 1061: | ||
| ===== Lösungen ===== | ===== Lösungen ===== | ||
| - | < | + | < |
| ++++Lösungen A| | ++++Lösungen A| | ||