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:codierung [2026-03-30 09:52] – [Aufgabe 5 (optional)] hofgf_informatik:verschluesselung:codierung [2026-04-27 12:45] (aktuell) hof
Zeile 11: Zeile 11:
  
 In Python können wir einen Buchstaben mit der `ord()` Funktion in die entsprechende ASCII-Zahl verwandeln. `ord` steht für _ordinal value_, also die Ordnungszahl eines Buchstabens in der ASCII-Textcodierung. In Python können wir einen Buchstaben mit der `ord()` Funktion in die entsprechende ASCII-Zahl verwandeln. `ord` steht für _ordinal value_, also die Ordnungszahl eines Buchstabens in der ASCII-Textcodierung.
-<HTML><script type="module" src="https://bottom.ch/ksr/ed/bottom-editor.js"></script></HTML> 
    
-<HTML><bottom-editor>letter = 'A'  # Muss ein einzelner Buchstabe sein! +<bottom-editor>letter = 'A'  # Muss ein einzelner Buchstabe sein! 
-print(ord(letter))</bottom-editor></HTML>+print(ord(letter))</bottom-editor>
  
 Mit `chr()` kann ein Zahlencode wieder in den codierten Buchstaben zurückverwandelt werden. `chr` steht für _character_. Mit `chr()` kann ein Zahlencode wieder in den codierten Buchstaben zurückverwandelt werden. `chr` steht für _character_.
-<HTML><bottom-editor>print(chr(65))</bottom-editor></HTML>+<bottom-editor>print(chr(65))</bottom-editor>
  
 #### String Formatierung #### String Formatierung
Zeile 23: Zeile 22:
 Oft möchten wir einen längeren Text ausgeben, wobei nur einzelne Teile an der richtigen Stelle eingefügt werden sollen. Dafür verwenden wir einen f-String, d.h. vor dem ersten Anführungszeichen steht der Buchstabe `f`. Im String können mit geschweiften Klammern Python-Ausdrücke (z.B. Variablen) in die Ausgabe eingefügt werden: Oft möchten wir einen längeren Text ausgeben, wobei nur einzelne Teile an der richtigen Stelle eingefügt werden sollen. Dafür verwenden wir einen f-String, d.h. vor dem ersten Anführungszeichen steht der Buchstabe `f`. Im String können mit geschweiften Klammern Python-Ausdrücke (z.B. Variablen) in die Ausgabe eingefügt werden:
  
-<HTML><bottom-editor>name = "Papa Moll"+<bottom-editor>name = "Papa Moll"
 age = 42 age = 42
-print(f"Ich heisse {name} und bin {age*365} Tage alt.")</bottom-editor></HTML>+print(f"Ich heisse {name} und bin {age*365} Tage alt.")</bottom-editor>
  
 Um das Ausgabeformat des Arguments zu kontrollieren, fügen wir im entsprechenden Platzhalter eine _[[https://docs.python.org/3/library/string.html#format-specification-mini-language|Format Specification]]_ ein: nach der Variablen wird nach einem Doppelpunkt das Ausgabeformat eingeben, in Beispiel unten `07b`. Das `b` bedeutet wie oben die Ausgabe als Binärzahl; die vorangestellte `7` gibt die Breite (_width_) an, also, dass mindestens sieben Zeichen verwendet werden sollen; die `0` gibt an, mit welchem Zeichen wir die Zahl auffüllen wollen, wenn die Breite nicht erreicht wird: Um das Ausgabeformat des Arguments zu kontrollieren, fügen wir im entsprechenden Platzhalter eine _[[https://docs.python.org/3/library/string.html#format-specification-mini-language|Format Specification]]_ ein: nach der Variablen wird nach einem Doppelpunkt das Ausgabeformat eingeben, in Beispiel unten `07b`. Das `b` bedeutet wie oben die Ausgabe als Binärzahl; die vorangestellte `7` gibt die Breite (_width_) an, also, dass mindestens sieben Zeichen verwendet werden sollen; die `0` gibt an, mit welchem Zeichen wir die Zahl auffüllen wollen, wenn die Breite nicht erreicht wird:
  
-<HTML><bottom-editor># Die gleiche Zahl wird zweimal ausgegeben:+<bottom-editor># Die gleiche Zahl wird zweimal ausgegeben:
 # einmal im normalen Dezimalformat, # einmal im normalen Dezimalformat,
 # einmal als Binärzahl (b) # einmal als Binärzahl (b)
Zeile 35: Zeile 34:
 #  - vorne mit Nullen (0) aufgefüllt. #  - vorne mit Nullen (0) aufgefüllt.
 number = 42 number = 42
-print(f"Die Binärform von {number} ist {number:07b}")</bottom-editor></HTML>+print(f"Die Binärform von {number} ist {number:07b}")</bottom-editor>
 ### Aufgabe 1: ASCII-Tabelle erzeugen ### Aufgabe 1: ASCII-Tabelle erzeugen
 Drucke eine ASCII-Tabelle aus mit folgenden Einträgen: Buchstaben `a-z`, `A-Z`, Zifferen `0-9`, Leerzeichen ` `, Punkt `.` Für jeden Eintrag soll der Buchstabe sowie seine ASCII-Codierung in Dezimal- und im Binärformat enthalten sein. Das Binärformat soll 8 bits (=1 byte) enthalten und vorne mit Nullen aufgefüllt werden. Drucke eine ASCII-Tabelle aus mit folgenden Einträgen: Buchstaben `a-z`, `A-Z`, Zifferen `0-9`, Leerzeichen ` `, Punkt `.` Für jeden Eintrag soll der Buchstabe sowie seine ASCII-Codierung in Dezimal- und im Binärformat enthalten sein. Das Binärformat soll 8 bits (=1 byte) enthalten und vorne mit Nullen aufgefüllt werden.
Zeile 51: Zeile 50:
 <nodisp 1> <nodisp 1>
 ++++Lösung:| ++++Lösung:|
-<HTML><bottom-editor>def printEntry(code):+<bottom-editor>def printEntry(code):
     print(f"{chr(code):2} | {code:7d} | {code:08b}"     print(f"{chr(code):2} | {code:7d} | {code:08b}"
  
Zeile 65: Zeile 64:
         printEntry(code)         printEntry(code)
                  
-printTable()</bottom-editor></HTML>+printTable()</bottom-editor>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 101: Zeile 100:
   - Mit der ASCII-Tabelle kannst du nun die Binärzahlen in Buchstaben wandeln und erhälst den Klartext.   - Mit der ASCII-Tabelle kannst du nun die Binärzahlen in Buchstaben wandeln und erhälst den Klartext.
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 Der Klartext Lautet: ''Pelz'' Der Klartext Lautet: ''Pelz''
Zeile 110: Zeile 109:
 In Python können wir einen String, der eine Binärzahl codiert, mit der `int()` Funktion in eine richtige Zahl verwandeln, indem wir die Basis `2` angeben: In Python können wir einen String, der eine Binärzahl codiert, mit der `int()` Funktion in eine richtige Zahl verwandeln, indem wir die Basis `2` angeben:
  
-<HTML><bottom-editor>print(int('101010', 2))</bottom-editor></HTML>+<bottom-editor>print(int('101010', 2))</bottom-editor>
  
 Die binäre XOR-Operation wird in Python mit dem `^` Operator ausgeführt: Die binäre XOR-Operation wird in Python mit dem `^` Operator ausgeführt:
  
-<HTML><bottom-editor>one = '11110000'+<bottom-editor>one = '11110000'
 two = '01010101' two = '01010101'
  
Zeile 121: Zeile 120:
  
 xor = one_number ^ two_number xor = one_number ^ two_number
-print(f"{one} XOR {two} = {xor:08b}")</bottom-editor></HTML>+print(f"{one} XOR {two} = {xor:08b}")</bottom-editor>
  
 Mit diesen Informationen solltest du ein Programm schreiben können, das den folgenden Text entschlüsselt. Mit diesen Informationen solltest du ein Programm schreiben können, das den folgenden Text entschlüsselt.
Zeile 140: Zeile 139:
 ``` ```
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 <code python decrypt.py> <code python decrypt.py>
Zeile 168: Zeile 167:
 ++++ ++++
 </nodisp> </nodisp>
- 
 ### Aufgabe 5 (optional) ### Aufgabe 5 (optional)
  
Zeile 200: Zeile 198:
   * `string.encode()` und `bytes.decode()` ([[https://docs.python.org/3/library/stdtypes.html#str.encode|Python Dokumentation]])   * `string.encode()` und `bytes.decode()` ([[https://docs.python.org/3/library/stdtypes.html#str.encode|Python Dokumentation]])
  
-<HTML><bottom-editor>def textToBytes(text):+<bottom-editor>def textToBytes(text):
     """Converts a string into a list of ASCII codes."""     """Converts a string into a list of ASCII codes."""
     numbers = []     numbers = []
Zeile 275: Zeile 273:
                 00111010 00100001 01101110 00100001 00100110 00100011 00100101                  00111010 00100001 01101110 00100001 00100110 00100011 00100101 
                 01101110 00110010 00100100 00100011 00110111 01101111"""                 01101110 00110010 00100100 00100011 00110111 01101111"""
-print(decrypt(ciphertext, key))</bottom-editor></HTML>+print(decrypt(ciphertext, key))</bottom-editor>
 ++++ ++++
 </nodisp> </nodisp>
Zeile 281: Zeile 279:
 <nodisp 1> <nodisp 1>
 ++++ Lösung| ++++ Lösung|
-<code python>+<bottom-editor layout="split"> 
 +# In normal python: pip install opencv-python numpy 
 +import micropip 
 +await micropip.install(["numpy", "opencv-python"]); 
 import cv2 as cv import cv2 as cv
 import numpy as np import numpy as np
Zeile 288: Zeile 290:
 key = "11110000011001101100010000110101110010111001100100010110000111110001100101000101101110111111000000000011000000111110010111101010111110001110101010101000001111001010110110100111000000000011111111010001111100110111101001111010000001011101010000101111110101001100010101001011011101110101011001110100100001101110110011000110100100111100010011001100100111000000000011011110000100010010001110101100111101010100111100010001010100101100111101101011100110110000000000101000000010100111110010000011101000111001100000101011110000000100110011000001000101001000011101000100100100100010100111110011101011010101010110001011010001001010000111000100100010111001111100011100001000011001100011100110101101111001000110001001111010111111100001111111111111011101100101111100000101000101100101011111111110001010111000101010110011011010111111101111110100000100100101001000100101100111100010101011111111001001101000011001101111000111111110101100001100110110000101100000000010111110001011011010010010000111010010011001101010010100000011101111110100101001111110011010000101001111001111000000010101111001000101100110010111101111001000010110111101000110110101000101110001001011100111110010111001011111111010000010011000011101100110111001001000110001110110011011000011001010001111000101100100001010110011000001011100001011010011010001110101010001111000000111111101110011000010010000111010111000111000110" key = "11110000011001101100010000110101110010111001100100010110000111110001100101000101101110111111000000000011000000111110010111101010111110001110101010101000001111001010110110100111000000000011111111010001111100110111101001111010000001011101010000101111110101001100010101001011011101110101011001110100100001101110110011000110100100111100010011001100100111000000000011011110000100010010001110101100111101010100111100010001010100101100111101101011100110110000000000101000000010100111110010000011101000111001100000101011110000000100110011000001000101001000011101000100100100100010100111110011101011010101010110001011010001001010000111000100100010111001111100011100001000011001100011100110101101111001000110001001111010111111100001111111111111011101100101111100000101000101100101011111111110001010111000101010110011011010111111101111110100000100100101001000100101100111100010101011111111001001101000011001101111000111111110101100001100110110000101100000000010111110001011011010010010000111010010011001101010010100000011101111110100101001111110011010000101001111001111000000010101111001000101100110010111101111001000010110111101000110110101000101110001001011100111110010111001011111111010000010011000011101100110111001001000110001110110011011000011001010001111000101100100001010110011000001011100001011010011010001110101010001111000000111111101110011000010010000111010111000111000110"
  
-img cv.imread('encryption/bild_raetsel_xor_1373.png')+img_url = 'https://sca.ksr.ch/lib/exe/fetch.php?cache=&media=gf_informatik:umgang_inet_sca:bild_raetsel_xor_1373.png' 
 +# In vanilla python, use urllib.request.urlopen(img_url) 
 +from pyodide.http import pyfetch 
 +response = await pyfetch(img_url) 
 +data = await response.bytes() 
 + 
 +arr = np.asarray(bytearray(data), dtype=np.uint8) 
 +img = cv.imdecode(arr, -1) # 'Load it as it is' 
 # Note that the key length (in bits) is not byte-aligned (not a multiple of 8). # Note that the key length (in bits) is not byte-aligned (not a multiple of 8).
 print(img.size) print(img.size)
 print(len(key)) print(len(key))
- +  
-# Repeat the key as often as necessary to match the image length.+# Repeat the key as often as necessary to match the image length.
 key = key * math.ceil(img.size*8 / len(key)) key = key * math.ceil(img.size*8 / len(key))
 key_offset = 0 key_offset = 0
 + 
 # Process each pixel # Process each pixel
 for x in range(img.shape[0]): for x in range(img.shape[0]):
Zeile 311: Zeile 321:
         img[x,y] = b, g, r         img[x,y] = b, g, r
         key_offset = key_offset + 24         key_offset = key_offset + 24
 + 
 cv.imshow('image',img) cv.imshow('image',img)
 cv.waitKey() cv.waitKey()
-</code>+</bottom-editor>
 ++++ ++++
 </nodisp> </nodisp>
  
  • gf_informatik/verschluesselung/codierung.1774864342.txt.gz
  • Zuletzt geändert: 2026-03-30 09:52
  • von hof