Zum Fußzeileninhalt springen
PYTHON-HILFE

PyCryptodome für Verschlüsselung in Python verwenden

Im Zeitalter der digitalen Transformation kann die Bedeutung robuster kryptografischer Mechanismen nicht hoch genug eingeschätzt werden. Kryptographie gewährleistet die Sicherheit und den Datenschutz von Daten, während sie durch verschiedene Netzwerke und Systeme reisen. PyCryptodome ist eine Python-Bibliothek, die in der kryptografischen Landschaft herausragt und eine Fülle von Funktionalitäten bietet, um eine sichere Datenverarbeitung zu erleichtern, wie z.B. authentifizierte Verschlüsselungsmodi (GCM, CCM, EAX, SIV, OCB) und beschleunigtes AES mit erstklassiger Unterstützung. Dieser Artikel taucht in die letzte offizielle Version von PyCryptodome ein, untersucht dessen Funktionen, Anwendungsfälle, vereinfachten Installationsprozess und wie es effektiv in verschiedenen Anwendungen genutzt werden kann. Wir werden auch verschlüsselte PDF-Dateien mit einer separaten C#-Bibliothek IronPDF und PyCryptodome erstellen.

Übersicht über PyCryptodome

PyCryptodome ist ein eigenständiges Python-Paket mit kryptografischen Low-Level-Primitiven. Es wurde als Ersatz für die alte PyCrypto-Bibliothek entwickelt, um viele ihrer Einschränkungen zu überwinden und ihre Möglichkeiten zu erweitern. Es bietet eine breite Palette von kryptografischen Algorithmen und Protokollen, was es zu einem unschätzbaren Werkzeug für Entwickler macht, die Sicherheitsfunktionen in ihren Anwendungen implementieren müssen.

Wichtige Merkmale

  1. Breite Algorithmenunterstützung: PyCryptodome unterstützt eine umfassende Palette kryptografischer Algorithmen, darunter AES, RSA, DSA und viele mehr. Diese umfassende Unterstützung gewährleistet, dass Entwickler die notwendigen Werkzeuge für verschiedene kryptografische Anforderungen finden können.
  2. Benutzerfreundlichkeit: Die Bibliothek ist benutzerfreundlich gestaltet und verfügt über eine klare und prägnante API, die es auch Anwendern mit begrenzten kryptografischen Kenntnissen ermöglicht, Sicherheitsfunktionen effektiv zu implementieren.
  3. Aktive Wartung: Im Gegensatz zu seinem Vorgänger PyCrypto wird PyCryptodome aktiv gewartet, mit regelmäßigen Updates und Verbesserungen, um die Kompatibilität mit den neuesten Python-Versionen und Sicherheitsstandards zu gewährleisten.
  4. In sich abgeschlossen: PyCryptodome benötigt keine externen Abhängigkeiten, wodurch die Installation und Verwendung in verschiedenen Umgebungen unkompliziert ist.
  5. Integration mit bestehenden Bibliotheken: PyCryptodome lässt sich nahtlos in andere Python-Bibliotheken und -Frameworks integrieren, wodurch seine Einsatzmöglichkeiten in verschiedenen Anwendungen erweitert werden.

Installation

Die Installation von PyCryptodome ist dank seiner eigenständigen Natur ein einfacher Prozess. Es kann über pip, den Paket-Installer von Python, mit dem folgenden Befehl installiert werden:

pip install pycryptodome
pip install pycryptodome
SHELL

Kernkonzepte und Module

PyCryptodome ist in mehrere Module gegliedert, die jeweils unterschiedliche Aspekte der Kryptographie abdecken. Das Verständnis dieser Module ist entscheidend, um die Bibliothek effektiv zu nutzen.

Hashing

Hash-Funktionen sind grundlegend für die Kryptographie und bieten eine Möglichkeit, einen hash-Wert fester Größe aus beliebigen Daten zu erzeugen. PyCryptodome unterstützt verschiedene Hash-Algorithmen über das Crypto.Hash Modul.

Beispiel zur Verwendung der SHA-256-Hash-Funktion

from Crypto.Hash import SHA256

# Create a new SHA-256 hash object
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')

# Output the hexadecimal digest of the hash
print(hash_object.hexdigest())
from Crypto.Hash import SHA256

# Create a new SHA-256 hash object
hash_object = SHA256.new(data=b'Hello, PyCryptodome!')

# Output the hexadecimal digest of the hash
print(hash_object.hexdigest())
PYTHON

PyCryptodome (Wie es für Entwickler funktioniert): Abbildung 1 - Hashing-Ausgabe

Symmetrische Verschlüsselung

Symmetrische Verschlüsselung nutzt denselben Schlüssel für Verschlüsselung und Entschlüsselung. Das Crypto.Cipher Modul von PyCryptodome unterstützt mehrere symmetrische Verschlüsselungen, darunter AES, DES und mehr.

Beispiel für AES-Verschlüsselung und -Entschlüsselung

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

# Generate a random AES key
key = get_random_bytes(16)  # 16 bytes for AES-128

# Create a new AES cipher in EAX mode for encryption
cipher = AES.new(key, AES.MODE_EAX)
data = b'Secret Message'

# Encrypt the data and get the nonce, ciphertext and tag
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)

# Create a new AES cipher in EAX mode for decryption
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt(ciphertext)

# Verify the authenticity of the message
try:
    cipher.verify(tag)
    print("The message is authentic:", plaintext)
except ValueError:
    print("Key incorrect or message corrupted")
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

# Generate a random AES key
key = get_random_bytes(16)  # 16 bytes for AES-128

# Create a new AES cipher in EAX mode for encryption
cipher = AES.new(key, AES.MODE_EAX)
data = b'Secret Message'

# Encrypt the data and get the nonce, ciphertext and tag
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(data)

# Create a new AES cipher in EAX mode for decryption
cipher = AES.new(key, AES.MODE_EAX, nonce=nonce)
plaintext = cipher.decrypt(ciphertext)

# Verify the authenticity of the message
try:
    cipher.verify(tag)
    print("The message is authentic:", plaintext)
except ValueError:
    print("Key incorrect or message corrupted")
PYTHON

PyCryptodome (Wie es für Entwickler funktioniert): Abbildung 2 - AES-Ausgabe

Asymmetrische Verschlüsselung

Asymmetrische Verschlüsselung verwendet ein Schlüsselpaar: einen öffentlichen und einen privaten Schlüssel. Das Crypto.PublicKey Modul von PyCryptodome bietet Unterstützung für RSA, DSA und ECC (Elliptische Kurven-Kryptografie).

Beispiel für RSA-Verschlüsselung und -Entschlüsselung

from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Generate an RSA key pair
key = RSA.generate(2048)
public_key = key.publickey()

# Encrypt the message using the public key
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(b'Secret Message')

# Decrypt the message using the private key
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext)
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Generate an RSA key pair
key = RSA.generate(2048)
public_key = key.publickey()

# Encrypt the message using the public key
cipher = PKCS1_OAEP.new(public_key)
ciphertext = cipher.encrypt(b'Secret Message')

# Decrypt the message using the private key
cipher = PKCS1_OAEP.new(key)
plaintext = cipher.decrypt(ciphertext)
print(plaintext)
PYTHON

PyCryptodome (Wie es für Entwickler funktioniert): Abbildung 3 - RSA-Ausgabe

Schlüsselableitung

Schlüsselableitungsfunktionen erzeugen kryptografische Schlüssel aus einem Passwort oder einer Passphrase. Dies ist besonders nützlich bei passwortbasierter Verschlüsselung. PyCryptodome unterstützt PBKDF2, scrypt und andere Schlüsselableitungsalgorithmen.

Beispiel zur Verwendung von PBKDF2

from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes

# Define a password and generate a salt
password = b'my secret password'
salt = get_random_bytes(16)

# Derive a key from the password and salt using PBKDF2
key = PBKDF2(password, salt, dkLen=32, count=1000000)
print(key)
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes

# Define a password and generate a salt
password = b'my secret password'
salt = get_random_bytes(16)

# Derive a key from the password and salt using PBKDF2
key = PBKDF2(password, salt, dkLen=32, count=1000000)
print(key)
PYTHON

PyCryptodome (Wie es für Entwickler funktioniert): Abbildung 4 - PBKDF2-Ausgabe

Anwendungsfälle

Passwortverwaltung

Passwortmanager profitieren von PyCryptodomes Schlüsselableitungsfunktionen, um Benutzerpasswörter sicher zu speichern und abzurufen. Durch die Verwendung starker Schlüsselableitungsalgorithmen wie PBKDF2 können Entwickler sicherstellen, dass gespeicherte Passwörter gegen Brute-Force-Angriffe resistent sind.

Beispiel zur Sicherung von Passwörtern

from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES

# Derive a strong key from a password
password = b'user_password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)

# Encrypt the password before storing
cipher = AES.new(key, AES.MODE_EAX)
stored_password = b'ActualPassword'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(stored_password)

# Store ciphertext, nonce, salt, and tag securely
password_data = {
    'ciphertext': ciphertext,
    'nonce': nonce,
    'salt': salt,
    'tag': tag
}

# Decrypt the password when needed
key = PBKDF2(password, password_data['salt'], dkLen=32, count=1000000)
cipher = AES.new(key, AES.MODE_EAX, nonce=password_data['nonce'])
plaintext = cipher.decrypt(password_data['ciphertext'])

# Verify the authenticity of the password
try:
    cipher.verify(password_data['tag'])
    print("The stored password is authentic:", plaintext)
except ValueError:
    print("Key incorrect or password corrupted")
from Crypto.Protocol.KDF import PBKDF2
from Crypto.Random import get_random_bytes
from Crypto.Cipher import AES

# Derive a strong key from a password
password = b'user_password'
salt = get_random_bytes(16)
key = PBKDF2(password, salt, dkLen=32, count=1000000)

# Encrypt the password before storing
cipher = AES.new(key, AES.MODE_EAX)
stored_password = b'ActualPassword'
nonce = cipher.nonce
ciphertext, tag = cipher.encrypt_and_digest(stored_password)

# Store ciphertext, nonce, salt, and tag securely
password_data = {
    'ciphertext': ciphertext,
    'nonce': nonce,
    'salt': salt,
    'tag': tag
}

# Decrypt the password when needed
key = PBKDF2(password, password_data['salt'], dkLen=32, count=1000000)
cipher = AES.new(key, AES.MODE_EAX, nonce=password_data['nonce'])
plaintext = cipher.decrypt(password_data['ciphertext'])

# Verify the authenticity of the password
try:
    cipher.verify(password_data['tag'])
    print("The stored password is authentic:", plaintext)
except ValueError:
    print("Key incorrect or password corrupted")
PYTHON

PyCryptodome (Wie es für Entwickler funktioniert): Abbildung 5 - Sicherung der Passwortausgabe

IronPDF for Python

IronPDF ist eine leistungsstarke PDF-Generierungsbibliothek for Python, die es Entwicklern ermöglicht, PDF-Dokumente mühelos zu erstellen, zu bearbeiten und zu manipulieren. Es bietet eine breite Palette von Funktionalitäten, von der Umwandlung von HTML in PDF bis hin zur Zusammenführung mehrerer PDFs, was es zur idealen Wahl für die Automatisierung von Dokumenten-Workflows macht. In Kombination mit PyCryptodome, einer umfassenden Bibliothek für kryptografische Operationen, können Entwickler sichere Funktionen zu ihren PDF-Dokumenten hinzufügen, wie Verschlüsselung und digitale Signaturen. Diese Integration ist besonders nützlich für Anwendungen, die ein hohes Maß an Sicherheit und Datenintegrität erfordern, z.B. in finanziellen, rechtlichen oder vertraulichen Umgebungen.

Um IronPDF zu installieren, können Sie pip, den Python-Paketmanager, verwenden. Hier erfahren Sie, wie Sie beginnen:

pip install ironpdf
pip install ironpdf
SHELL

PyCryptodome (Wie es für Entwickler funktioniert): Abbildung 6 - IronPDF

Nach der Installation können Sie mit IronPDF beginnen, PDFs zu erstellen und zu manipulieren. Unten ist ein einfaches Beispiel, das zeigt, wie man mit IronPDF ein PDF erstellt und dann mit PyCryptodome verschlüsselt:

from ironpdf import ChromePdfRenderer
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os

# Create a new PDF renderer
renderer = ChromePdfRenderer()

# Render a URL as a PDF and save it
pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/")
pdfFromUrl.SaveAs("output.pdf")

# Function to encrypt a file using AES
def encrypt_file(file_name, key):
    cipher = AES.new(key, AES.MODE_CBC)  # Use AES in CBC mode
    iv = cipher.iv
    with open(file_name, 'rb') as f:
        data = f.read()
    encrypted_data = iv + cipher.encrypt(pad(data, AES.block_size))
    with open(file_name + '.enc', 'wb') as f:
        f.write(encrypted_data)

# Example usage
key = os.urandom(16)  # AES key must be either 16, 24, or 32 bytes long
encrypt_file("output.pdf", key)
from ironpdf import ChromePdfRenderer
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os

# Create a new PDF renderer
renderer = ChromePdfRenderer()

# Render a URL as a PDF and save it
pdfFromUrl = renderer.RenderUrlAsPdf("https://ironpdf.com/")
pdfFromUrl.SaveAs("output.pdf")

# Function to encrypt a file using AES
def encrypt_file(file_name, key):
    cipher = AES.new(key, AES.MODE_CBC)  # Use AES in CBC mode
    iv = cipher.iv
    with open(file_name, 'rb') as f:
        data = f.read()
    encrypted_data = iv + cipher.encrypt(pad(data, AES.block_size))
    with open(file_name + '.enc', 'wb') as f:
        f.write(encrypted_data)

# Example usage
key = os.urandom(16)  # AES key must be either 16, 24, or 32 bytes long
encrypt_file("output.pdf", key)
PYTHON

Dieses Skript zeigt die Erstellung eines einfachen PDFs mit IronPDF und verschlüsselt es dann mit AES von PyCryptodome, was eine Grundlage für den Aufbau komplexerer und sichererer PDF-Verarbeitungsanwendungen bietet.

PyCryptodome (Wie es für Entwickler funktioniert): Abbildung 7 - Verschlüsselte Datei-Ausgabe

Abschluss

Abschließend ist PyCryptodome eine leistungsstarke und vielseitige Python-Bibliothek, die kryptografische Operationen für Entwickler erheblich verbessert, indem sie eine breite Palette von Algorithmen und eine einfache Integration mit anderen Tools wie IronPDF bietet. Mit ihrem umfassenden Funktionsumfang, einschließlich Unterstützung für authentifizierte Verschlüsselungsmodi, symmetrische und asymmetrische Verschlüsselung, Hashing und Schlüsselableitung, deckt PyCryptodome die Bedürfnisse moderner Anwendungen ab, die robuste Sicherheitsmaßnahmen erfordern. Ihre leichte Handhabung, aktive Wartung und eigenständige Natur machen sie zu einem unverzichtbaren Werkzeug für die Implementierung einer sicheren Datenverarbeitung in verschiedenen Szenarien, von der Passwortverwaltung bis hin zur sicheren Dokumentenerstellung und -verschlüsselung, um Datenintegrität und Vertraulichkeit in einer zunehmend digitalen Welt zu gewährleisten.

Für Details zur IronPDF-Lizenzierung siehe die IronPDF-Lizenzseite. Um mehr zu erfahren, schauen Sie sich unser ausführliches Tutorial zur Umwandlung von HTML in PDF an.

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me