| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung |
| gf_informatik:verschluesselung:codierung [2026-03-31 06:27] – hof | gf_informatik:verschluesselung:codierung [2026-04-09 06:40] (aktuell) – hof |
|---|
| |
| 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! |
| ``` | ``` |
| |
| <nodisp 2> | <nodisp 1> |
| ++++Lösung:| | ++++Lösung:| |
| <code python decrypt.py> | <code python decrypt.py> |
| ++++ | ++++ |
| </nodisp> | </nodisp> |
| |
| ### Aufgabe 5 (optional) | ### Aufgabe 5 (optional) |
| |
| <nodisp 1> | <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 |
| 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]): |
| 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> |
| |