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, Auch in der Bibliothek
Rust-Anwendungsüberwachung: Die Bibliothek `tracing`
OneOf für C# (.NET): Vollständige Anleitung mit Beispielen
PDF-Erstellung in C++: Bibliotheken, Werkzeuge und Codebeispiele
Arbeiten mit Bildern in PHP: Die Bibliotheken GD und Imagick
Aufgabenwarteschlangen in Go: Überblick über Bibliotheken und Werkzeuge