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-18 14:26] hofgf_informatik:verschluesselung:codierung [2026-04-09 06:40] (aktuell) hof
Zeile 8: Zeile 8:
  
 [[https://cryptii.com/pipes/PbRHzQ|Probier es aus]]! [[https://cryptii.com/pipes/PbRHzQ|Probier es aus]]!
- 
 ### Python ### Python
  
 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><script type="module" src="https://bottom.ch/editor/stable/bottom-editor.js"></script></HTML>
    
 <HTML><bottom-editor>letter = 'A'  # Muss ein einzelner Buchstabe sein! <HTML><bottom-editor>letter = 'A'  # Muss ein einzelner Buchstabe sein!
Zeile 19: Zeile 18:
 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> <HTML><bottom-editor>print(chr(65))</bottom-editor></HTML>
- 
- 
-Um die Zahl im Binärformat auszugeben, können wir die `format()` Funktion wie folgt verwenden: 
- 
-<HTML><bottom-editor>print(format(65, "b"))</bottom-editor></HTML> 
- 
  
 #### String Formatierung #### String Formatierung
Zeile 45: Zeile 38:
 ### 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.
 +
 +Die Ausgabe soll ungefähr so aussehen:
  
 ``` ```
Zeile 54: Zeile 49:
 ``` ```
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 <HTML><bottom-editor>def printEntry(code): <HTML><bottom-editor>def printEntry(code):
Zeile 93: Zeile 88:
 `01010011 01110101 01100111` `01010011 01110101 01100111`
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 `00111011 00010100 00001011` `00111011 00010100 00001011`
Zeile 106: Zeile 101:
   - 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 129: Zeile 124:
  
 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.
-  der Schlüssel lautet "ROMANSHORN", wobei immer der ASCII-Code jedes Buchstabens verwendet wird. + 
-  die Buchstaben des Schlüssels werden alle 10 Buchstaben wieder von vorne verwendet+Hinweise: 
-  * mit `split()` kann ein String in einzelne Wörter geteilt werden: `for word in "eins zwei drei".split():`+  Der Schlüssel lautet "ROMANSHORN", wobei immer der ASCII-Code jedes Buchstabens verwendet wird. 
 +    Wandle den Schlüssel in eine Folge von ASCII-codierten Zahlen um: `[82, 79, 77, ...]`! 
 +  * Mit `split()` kann ein String in einzelne Wörter geteilt werden: `for word in "eins zwei drei".split():` 
 +    * Wandle das Chiffrat in eine Liste von Zahlen um: `[22, 38, 40, ...]`! 
 +  * XOR-kombiniere nun immer eine Zahl aus dem Chiffrat mit einer Zahl aus dem Schlüssel! 
 +    * Die Buchstaben des Schlüssels werden alle 10 Buchstaben wieder von vorne verwendet. 
 +    * Wandle die resultierende Zahl mit `chr()` in Buchstaben um!
  
 ``` ```
Zeile 139: Zeile 140:
 ``` ```
  
-<nodisp 2>+<nodisp 1>
 ++++Lösung:| ++++Lösung:|
 <code python decrypt.py> <code python decrypt.py>
Zeile 167: Zeile 168:
 ++++ ++++
 </nodisp> </nodisp>
- 
- 
 ### Aufgabe 5 (optional) ### Aufgabe 5 (optional)
  
Zeile 193: Zeile 192:
 ++++ ++++
  
-<nodisp 2>+<nodisp 1>
 ++++Full Block Coder:| ++++Full Block Coder:|
  
Zeile 279: Zeile 278:
 </nodisp> </nodisp>
  
-<nodisp 2>+<nodisp 1>
 ++++ Lösung| ++++ Lösung|
-<code python>+<html><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 291:
 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 322:
         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></html>
 ++++ ++++
 </nodisp> </nodisp>
  
  • gf_informatik/verschluesselung/codierung.1773843989.txt.gz
  • Zuletzt geändert: 2026-03-18 14:26
  • von hof