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:daten_sca:verschluesselung [2026-03-30 09:27] – [Zusatzaufgaben] scagf_informatik:daten_sca:verschluesselung [2026-05-11 11:55] (aktuell) – [Auftrag] sca
Zeile 197: Zeile 197:
  
 Die Nachricht "RYDDUYKFXUKEBKFBBKKBQXBPVBJF" wurde mit dem Schlüssel "UELXBICNYAZJSQORTPKFMGVHWD" verschlüsselt. Schreibe ein Programm, mit welchem du die Nachricht im Klartext ermitteln kannst. Die Nachricht "RYDDUYKFXUKEBKFBBKKBQXBPVBJF" wurde mit dem Schlüssel "UELXBICNYAZJSQORTPKFMGVHWD" verschlüsselt. Schreibe ein Programm, mit welchem du die Nachricht im Klartext ermitteln kannst.
 +
 +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 durch. Gehe dabei für jeden Buchstaben den gesamten Text durch und ermittle, wie oft dieser im Text vorkommt.
       1. Speichere das Alphabet in einer Liste oder einem String, z.B. `alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"`.       1. Speichere das Alphabet in einer Liste oder einem String, z.B. `alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"`.
       1. Für jeden Buchstaben musst du irgendwo dessen Anzahl speichern. Verwende dazu eine Liste: Die erste Zahl darin steht für die Anzahl "A", die zweite für die Anzahl "B" bis und mit "Z" usw:<WRAP>       1. Für jeden Buchstaben musst du irgendwo dessen Anzahl speichern. Verwende dazu eine Liste: Die erste Zahl darin steht für die Anzahl "A", die zweite für die Anzahl "B" bis und mit "Z" usw:<WRAP>
Zeile 466: Zeile 468:
 count = [0,0,0,0,...,0] count = [0,0,0,0,...,0]
 </code></WRAP> </code></WRAP>
-      1. Mit `text.count(buchstabe)` wird ermittelt, wie oft der Buchstabe `buchstabe` im Text `text` vorkommt.+      1. Alternative: Starte mit einer leeren Liste `count = []`. Nachdem du die Anzahl A ermittelt hast, appende diese der Liste. Ermittle dann die Anzahl B und appende erneut und so weiter. 
 +      1. Mit der vordefinierten `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 "E" sein). Um es in Prozent anzugeben, multipliziere die Zahl mit $100$.       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 "E" sein). Um es in Prozent anzugeben, multipliziere die Zahl mit $100$.
       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, ermittle was es für eines ist, und erhöhe dann den entsprechenden Counter um $1$.+   1. **Standard.** Idee: Gehe jedes Zeichen des Textes durch. Ermittle zuerstum welches Zeichen sich handelt (Position im Alphabet). Erhöhe dann den entsprechenden Counter um $1$.
       1. Speichere das Alphabet in einer Liste oder einem String, z.B. `alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"`.       1. Speichere das Alphabet in einer Liste oder einem String, z.B. `alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"`.
       1. Für jeden Buchstaben musst du irgendwo dessen Anzahl speichern. Verwende dazu eine Liste: Die erste Zahl darin steht für die Anzahl "A", die zweite für die Anzahl "B" bis und mit "Z" usw:<WRAP>       1. Für jeden Buchstaben musst du irgendwo dessen Anzahl speichern. Verwende dazu eine Liste: Die erste Zahl darin steht für die Anzahl "A", die zweite für die Anzahl "B" bis und mit "Z" usw:<WRAP>
Zeile 587: Zeile 590:
 <code python> <code python>
 import unicodedata import unicodedata
 +import hashlib
 +
 ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,!?" ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,!?"
  
 ################################### ###################################
 + 
 key = #TODO: HIER MUSS DER KEY FESTGELEGT WERDEN key = #TODO: HIER MUSS DER KEY FESTGELEGT WERDEN
    
 ################################### ###################################
 +
 +# key check using hashes
 +keys_hashed = ['eda0b68b535db8b5351411d0c6107ae914d2ae693bbbc4a65563c0bd7b71c236','518f09cd2ae6ed62f4f69b68100f500daf50512b770441ba3d5887aaebdec92c','240e84641bec5e258c90964f9a5dca0e491b3654fdbeb3d67303dbaad3c51fb6','1b430006cae20c25f86ffe754e00b90fe7badfb9b2da99d81ce0026c4c548b5a']
 +if not hashlib.sha256(key.encode()).hexdigest() in keys_hashed:
 +    raise Exception('Eingegebener key ist NICHT korrekt!')
  
 for c in key: for c in key:
     if c not in ALPHABET: raise Exception("Unerlaubtes Symbol im Key!")     if c not in ALPHABET: raise Exception("Unerlaubtes Symbol im Key!")
 + 
 def encryption_vigenere(cleartext,password): def encryption_vigenere(cleartext,password):
     cleartext = cleartext.replace(' ','_')     cleartext = cleartext.replace(' ','_')
Zeile 632: Zeile 642:
 </code> </code>
 ++++ ++++
 +
 +<nodisp 2>
 +
 +++++LEHRER INFO WICHTIG!|
 +
 +Die hashed PW müssen jeweils angepasst werden!
 +
 +Code dafür:
 +
 +<code python>
 +import hashlib
 +
 +text = "WORLD"
 +
 +pws = ['KSR','PIZZA','SCHWEIZ']
 +
 +for text in pws:
 +    hashed = hashlib.sha256(text.encode()).hexdigest()
 +    print(hashed)
 +</code>
 +
 +++++
 +
 +</nodisp>
 +
 +=== Auftrag ===
 +
 +++++Vorbereitung LP|
 +
 +   1. keys ausdenken, immer 1 key pro 4-5 SuS
 +   1. auf Zetteli schreiben
 +   1. hashes in Code anpassen (überprüft, ob eingegebene keys korrekt)
 +   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 =====
  
-<nodisp 2>+<nodisp 1>
  
 ++++Lösungen A| ++++Lösungen A|
  • gf_informatik/daten_sca/verschluesselung.1774862852.txt.gz
  • Zuletzt geändert: 2026-03-30 09:27
  • von sca