Kryptographie in PHP: Verschlüsselung und Hashing – vollständiger Leitfaden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Kryptographie in PHP: Verschlüsselung und Hashing – vollständiger Leitfaden



In der modernen Webentwicklung ist Datensicherheit eine der obersten Prioritäten. PHP bietet leistungsstarke integrierte Werkzeuge für den kryptographischen Schutz: vom einfachen Passwort-Hashing bis zur komplexen asymmetrischen Verschlüsselung. In diesem Artikel behandeln wir die grundlegenden Ansätze, Bibliotheken und Best Practices für die Arbeit mit Kryptographie in PHP.



1. Daten-Hashing



Hashing ist die irreversible Umwandlung von Daten in eine Zeichenkette fester Länge. Es wird verwendet, um Passwörter zu speichern, die Integrität von Dateien zu überprüfen und digitale Signaturen zu erstellen.



1.1. Passwort-Hashing (password_hash)



Seit PHP 5.5 wird für das Passwort-Hashing die Verwendung der Funktion password_hash() empfohlen. Sie wählt automatisch einen sicheren Algorithmus (standardmäßig bcrypt) und generiert einen Salt.



<?php// Passwort hashen$password = 'MySecurePassword123!';$hash = password_hash($password, PASSWORD_DEFAULT);

echo "Hash: " . $hash . "";

// Passwort überprüfenif (password_verify($password, $hash)) { echo "Passwort ist korrekt!";} else { echo "Falsches Passwort!";}?>


1.2. Hashing mit hash()



Für andere Zwecke (z. B. Prüfsummen von Dateien) verwenden Sie die Funktion hash() mit den Algorithmen SHA-256, SHA-512 oder BLAKE2.



<?php$data = "Geheime Daten";$sha256_hash = hash('sha256', $data);$blake2b_hash = hash('blake2b', $data);

echo "SHA-256: " . $sha256_hash . "";echo "BLAKE2b: " . $blake2b_hash . "";?>


2. Symmetrische Verschlüsselung



Bei der symmetrischen Verschlüsselung wird derselbe Schlüssel zum Verschlüsseln und Entschlüsseln von Daten verwendet. In PHP wird dafür die OpenSSL-Erweiterung genutzt.



2.1. Verschlüsselung mit AES-256-GCM (authentifizierte Verschlüsselung)



Der empfohlene Modus ist AES-256-GCM, der Vertraulichkeit und Integritätsprüfung bietet.



<?php$plaintext = "Vertrauliche Nachricht";$key = random_bytes(32); // 256-Bit-Schlüssel$iv = random_bytes(12);  // 96-Bit-Initialisierungsvektor

// Verschlüsselung$ciphertext = openssl_encrypt( $plaintext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);

echo "Verschlüsselte Daten (base64): " . base64_encode($ciphertext) . "";echo "Authentifizierungstag: " . bin2hex($tag) . "";

// Entschlüsselung$decrypted = openssl_decrypt( $ciphertext, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);

echo "Entschlüsselt: " . $decrypted . "";?>


2.2. Verschlüsselung mit AES-256-CBC (für Kompatibilität)



Wenn Kompatibilität mit älteren Systemen erforderlich ist, verwenden Sie AES-256-CBC mit HMAC zur Integritätsprüfung.



<?phpfunction encryptAesCbc($plaintext, $key) {    $iv = random_bytes(16);    $ciphertext = openssl_encrypt($plaintext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);    $hmac = hash_hmac('sha256', $iv . $ciphertext, $key, true);    return base64_encode($hmac . $iv . $ciphertext);}

function decryptAesCbc($data, $key) { $data = base64_decode($data); $hmac = substr($data, 0, 32); $iv = substr($data, 32, 16); $ciphertext = substr($data, 48); $expectedHmac = hash_hmac('sha256', $iv . $ciphertext, $key, true); if (!hash_equals($hmac, $expectedHmac)) { throw new Exception("Datenintegrität verletzt!"); } return openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);}

$key = random_bytes(32);$encrypted = encryptAesCbc("Geheime Daten", $key);echo "Verschlüsselt: " . $encrypted . "";echo "Entschlüsselt: " . decryptAesCbc($encrypted, $key) . "";?>


3. Asymmetrische Verschlüsselung



Die asymmetrische Verschlüsselung verwendet ein Schlüsselpaar: einen öffentlichen (zum Verschlüsseln)

Empfehlungen