Kryptographie in PHP: Verschlüsselung und Hashing – ein praktischer 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 von Daten



Die Sicherheit von Webanwendungen ist eine der Hauptaufgaben von Entwicklern. PHP bietet leistungsstarke integrierte Werkzeuge für den kryptographischen Schutz von Daten. In diesem Artikel betrachten wir zwei Hauptrichtungen: Verschlüsselung (Umwandlung von Daten mit der Möglichkeit der Wiederherstellung) und Hashing (einseitige Umwandlung zur Integritätsprüfung).



1. Hashing in PHP



Hashing wird verwendet, um Passwörter, Prüfsummen zu speichern und die Datenintegrität zu überprüfen. In PHP werden dafür die Funktionen password_hash() und hash() verwendet.



1.1. Sicheres Hashing von Passwörtern



Verwenden Sie niemals md5 oder sha1 zum Speichern von Passwörtern. Verwenden Sie den Algorithmus bcrypt über password_hash():



<?php// Passwort hashen$password = 'MySecureP@ss123';$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);

echo $hash; // $2y$12$...

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


Die Funktion password_hash() generiert automatisch einen Salt und verwendet einen sicheren Algorithmus. Der Parameter cost reguliert die Rechenkomplexität (empfohlen 10-12).



1.2. Hashing beliebiger Daten



Verwenden Sie für die Integritätsprüfung von Dateien oder Daten die Algorithmen SHA-256 oder SHA-3:



<?php$data = "Wichtige Daten zur Überprüfung";$hash_sha256 = hash('sha256', $data);$hash_sha3_256 = hash('sha3-256', $data);

echo "SHA-256: " . $hash_sha256 . PHP_EOL;echo "SHA3-256: " . $hash_sha3_256 . PHP_EOL;

// Dateiintegrität prüfen$file_hash = hash_file('sha256', '/path/to/file.zip');echo "Datei-Hash: " . $file_hash;?>


2. Symmetrische Verschlüsselung in PHP



Symmetrische Verschlüsselung verwendet einen einzigen Schlüssel zum Ver- und Entschlüsseln von Daten. PHP unterstützt OpenSSL und Sodium.



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



Der empfohlene Modus ist AES-256-GCM, der eine Authentifizierung der Daten gewährleistet:



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

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

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

echo "Ursprüngliche Daten: " . $data . PHP_EOL;echo "Entschlüsselte Daten: " . $decrypted . PHP_EOL;echo "Authentifizierungs-Tag: " . bin2hex($tag);?>


Wichtig: Speichern Sie $key und $iv (oder deren Kombination) zur Entschlüsselung. Der Tag $tag überprüft die Datenintegrität.



2.2. Verschlüsselung mit Sodium (libsodium)



Seit PHP 7.2 ist Sodium Teil des Kerns. Es ist einfacher und sicherer:



<?php$data = "Vertrauliche Informationen";$key = sodium_crypto_secretbox_keygen(); // Schlüsselgenerierung$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

// Verschlüsselung$ciphertext = sodium_crypto_secretbox($data, $nonce, $key);

// Entschlüsselung$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);

echo "Verschlüsselt: " . base64_encode($ciphertext) . PHP_EOL;echo "Entschlüsselt: " . $decrypted . PHP_EOL;

// Speicher bereinigensodium_memzero($key);?>


3. Asymmetrische Verschlüsselung (RSA)



Asymmetrische Verschlüsselung verwendet ein Schlüsselpaar (öffentlich/privat). Es wird für die sichere Datenübertragung verwendet:



<?php// Schlüsselgenerierung$config = [    'private_key_bits' => 2048,    'private_key_type' => OPENSSL_KEYTYPE_RSA,                    

Empfehlungen