15.1 AES encryption practical
AES-Verschlüsselung anwenden
In diesem Jupyter Notebook wird die AES-Verschlüsselung angewendet:
- AES Online anwenden
- AES mit Python anwenden
AES Online Demo
Es gibt verschiedene Online-Demos, die die AES-Verschlüsselung anschaulich erklären und zeigen.
Hier eine davon:
https://demo.kenhaggerty.com/demos/aescipher
Erklärungen zur Demo:
- Der Key muss geheim gehalten werden. Nur Sender um Empfänger dürfen ihn kennen.
- Der Key hat üblicherweise eine Länge von 128, 192 oder 256 Bit
- Der Key muss nicht ein lesbarer Text sein. Oft ist er eine Zufällige HEX-Folge
- BASE64 erlaubt es diese HEX-Folge in lesbare Zeichen zu kodieren, war die Übermittlung zBsp per Email vereinfacht.
- IV = Initialisierungsvektor, verhindert, dass bei gleichem Key und gleichem Plain-Text das Ergebnis gleich bleibt.
Der IV darf mit der verschlüsselten Nachricht übermittelt werden.
Aufgabe: AES Online anwenden
Verwenden Sie die oben angegebene Online-Demo
Lässen Sie mit Refresh einen Key und IV generieren
Schreiben Sie einen kurzen Klartext (Plain-Text)
Codieren Sie den Text
Halten Sie Key, IV, Plain-Text und Cipher-Text unten im Feld fest.
Tauschen Sie den Codierten Text, den Schlüssel und den IV mit Ihrem Lernpartner aus
Decodieren Sie den Codierten Text ihres Lernpartners mit den Angaben Ihres Lernpartners.
Halten Sie Key, IV, Plain-Text und Cipher-Text unten im Feld fest.
AES mit Python anwenden
Dieses Beispiel verwendet die Bibliothek pycryptodome.
Wenn Sie das Notebook im VSCode ausführen: - öffnen Sie ein Terminal (Menü von VSCode: Terminal -> Neues Terminal)
- Geben Sie im Terminal folgendes ein und drücken Enter:
Danach müssen Sie einen Restart mit dem Notebook durchführen.
Alternative können Sie das Notebook im Colab ausführen, dort wird die Bibliothek direkt aus dem Notebook installiert:
https://colab.research.google.com/
Starten Sie danach den folgenden Code-Block.
Welcher Schritt ergibt welchen Output?
!pip install pycryptodome
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
import base64
# --- Hilfsfunktionen für Padding (PKCS#7) ---
BLOCK_SIZE = 16 # AES-Blockgröße in Bytes
def pad(data: bytes) -> bytes:
"""PKCS#7 Padding hinzufügen"""
padding_len = BLOCK_SIZE - (len(data) % BLOCK_SIZE)
return data + bytes([padding_len]) * padding_len
def unpad(data: bytes) -> bytes:
"""PKCS#7 Padding entfernen"""
padding_len = data[-1]
return data[:-padding_len]
# --- 1. Key und IV erzeugen ---
key = get_random_bytes(16) # 16 Bytes = 128 Bit (AES-128)
iv = get_random_bytes(16) # 16 Bytes IV für CBC
# --- 2. Klartext vorbereiten ---
plaintext = "Wir treffen uns mit Paul am Mittwoch in der Gruft"
plaintext_bytes = plaintext.encode("utf-8")
# --- 3. Verschlüsseln (Encrypt) ---
cipher_encrypt = AES.new(key, AES.MODE_CBC, iv)
ciphertext_bytes = cipher_encrypt.encrypt(pad(plaintext_bytes))
# --- 4. Für Transport/Anzeige in Base64 kodieren ---
key_b64 = base64.b64encode(key).decode("utf-8")
iv_b64 = base64.b64encode(iv).decode("utf-8")
ciphertext_b64 = base64.b64encode(ciphertext_bytes).decode("utf-8")
print("AES Key (Base64): ", key_b64)
print("AES IV (Base64): ", iv_b64)
print("Ciphertext (Base64): ", ciphertext_b64)
# --- 5. Entschlüsseln (Decrypt) ---
# In der Praxis käme Key/IV z.B. aus Base64-Strings:
key_decoded = base64.b64decode(key_b64)
iv_decoded = base64.b64decode(iv_b64)
ciphertext_decoded = base64.b64decode(ciphertext_b64)
cipher_decrypt = AES.new(key_decoded, AES.MODE_CBC, iv_decoded)
decrypted_padded = cipher_decrypt.decrypt(ciphertext_decoded)
decrypted = unpad(decrypted_padded).decode("utf-8")
print("Entschlüsselter Text: ", decrypted)Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: pycryptodome in /home/vscode/.local/lib/python3.10/site-packages (3.23.0)
AES Key (Base64): xSWzpVy2pA/QauBbMmh71g==
AES IV (Base64): 9yZ90TPiJaYmY1wZnkHNIw==
Ciphertext (Base64): D/SaYU3roeqXFsB8F2XPIs5iEFeX9mzcEcTFvq/vleHue7Cxv1kHmq0Ch+XyT1M7ImUdWU2B1+iGg6YRBQyGJw==
Entschlüsselter Text: Wir treffen uns mit Paul am Mittwoch in der Gruft
Aufgabe : AES mit Python anwenden
Kopieren Sie den obigen Code.
Kodieren Sie einen kurzen Text.
Tauschen Sie den codierten Text, den Schlüssel und den IV mit Ihrem Lernpartner aus.
Decodieren Sie den codierten Text ihres Lernpartners mit den Angaben Ihres Lernpartners.