pycryptodomex ist eine Kryptologie-Bibliothek und bietet Implementationen für viele aktuelle Verschlüsselungsverfahren an. pycryptodomex ist ein Abkömmling (engl. fork) der veralteten pycrypto-Bibliothek.
Installation
Damit pycryptodomex verwendet werden kann, muss die Bibliothek installiert werden. Dies funktioniert in Thonny wie in hier beschrieben (nach pycryptodomex suchen).
Bibliothek importieren
Die Bibliothek kann mit dem bekannten import-Befehl importiert werden:
from Cryptodome.Cipher import AES
from Cryptodome.Util import Padding2
Achtung
Obwohl die Bibliothek pycryptodomex heisst, muss beim Import der Name Cryptodome verwendet werden. Die Bibliothek ist sehr umfangreich. Wir importieren für unser Projekt nur das AES- und das Padding-Modul (um eine beliebige Nachricht auf die korrekte Länge für die Blockchiffre zu bringen), das vereinfacht unser Programm.
Wichtige Funktionen
new()
Diese Funktion erstellt ein neues AES-Cipher-Objekt mit dem angegenen Schlüssel und Modus.
AES.new(key, mode)- Parameter
key
Der geheime Schlüssel als byte-String (d.h. dass ein normaler Stringszuerst mittelss.encode()in einen byte-String umgewandelt werden muss). Der Schlüssel mit genau 16 Bytes (= Zeichen) enthalten.mode
Der Blockchiffre-Modus (z.B.AES.MODE_ECBoderAES.MODE_CBC).- Rückgabewert
- Die Funktion liefert als Resultat ein
Cipher-Objekt. Es soll in einer Variablen (z.B.cipher) gespeichert werden, die dann später zur Verschlüsselung genutzt wird.
Cipher-Objekte
Für Cipher-Objekte können unter Anderem die folgenden Funktionen aufgerufen werden:
encrypt()
Diese Funktion verschlüsselt den mitgegebenen Klartext mit AES und dem vorher hinterlegten Schlüssel und Modus.
cipher.encrypt(plaintext)- Parameter
plaintext
Die zu verschlüsselnde Mitteilung als byte-String mit korrekter Länge (Padding und Codierung als byte-String: siehe unten).- Rückgabewert
- Die Funktion liefert als Resultat die verschlüsselte Mitteilung als byte-String. Dieser byte-String kann nicht einfach in einen normalen String verwandelt werden, weil er vor allem nicht darstellbare Zeichen enthält. Daher bietet es sich an, diesen byte-String mittels Base64 zu codieren, um ihn anzuzeigen.
decrypt()
Diese Funktion entschlüsselt den mitgegebenen Geheimtext mit AES und dem vorher hinterlegten Schlüssel und Modus.
cipher.decrypt(ciphertext)- Parameter
ciphertext
Die zu verschlüsselnde Mitteilung als byte-String. Eine allfällige Base64-Codierung muss selbstverständlich vorher rückgängig gemacht werden.- Rückgabewert
- Die Funktion liefert als Resultat die entschlüsselte Mitteilung als byte-String, der noch das Padding enthält (siehe unten).
Padding-Funktionen
pad()
Diese Funktion stellt sicher, dass die Länge der Mitteilung genau einem Vielfachen der block_size entspricht.
Padding.pad(data_to_pad, block_size)- Parameter
data_to_pad
Der Klartext als byte-String.block_size
Die Blocklänge der Block-Chiffre, in unserem Beispiel16.- Rückgabewert
- Die Funktion liefert als Resultat den Klartext auf die korrekte Länge aufgefüllt als byte-String.
unpad()
Diese Funktion entfernt das Padding bei einem entschlüsselten Text.
Padding.unpad(padded_data, block_size)- Parameter
padded_data
Der Klartext, der noch das Padding enthält, als byte-String.block_size
Die Blocklänge der Block-Chiffre, in unserem Beispiel16.- Rückgabewert
- Die Funktion liefert als Resultat den ursprünglichen Klartext als byte-String zurück.
byte-String-Funktionen
encode()
Diese Funktion wandelt den String s in einen byte-String um.
s.encode()- Rückgabewert
- Die Funktion liefert als Resultat den byte-String.
decode()
Diese Funktion wandelt den byte-String b in einen String um.
b.decode(encoding)- Parameter
encoding
Die zu verwendende Zeichencodierung, in unserem Beispiel"utf-8".- Rückgabewert
- Die Funktion liefert als Resultat den String in der gewählten Codierung.
Offizielle Dokumentation
Die offizielle Dokumentation findet sich unter folgender Adresse: https://www.pycryptodome.org/
Wir benötigen aber nur die Funktionen der beiden folgenden Module: