15.1 AES encryption practical

Author

Peter Rutschmann

Published

26.11.2025

AES-Verschlüsselung anwenden

In diesem Jupyter Notebook wird die AES-Verschlüsselung angewendet:

    1. AES Online anwenden
    1. 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.

# Hier ihren Key, IV, Plain-Tet und Cipher-Text festhalten


# Hier die Angaben Ihres Lernpartners festhalten, inklusive Ihrer Decodierung

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:

/bin/python3 -m pip install --user pycryptodome

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.

# Mein eigenes Beispiel