Wie verschlüsseln und entschlüsseln Sie einen PHP-String?
Beim Verschlüsseln eines PHP-Strings wird der ursprüngliche String mithilfe eines Schlüssels in ein verschlüsseltes Format konvertiert oder Salz. Zum Entschlüsseln der Zeichenfolge ist derselbe Schlüssel oder Salt erforderlich, um die ursprüngliche Zeichenfolge abzurufen.
Verschlüsselungsprozess
-
Verschlüsseln: Verschlüsseln Sie die ursprüngliche Zeichenfolge Verwendung eines sicheren Algorithmus wie AES-256 im CTR (Counter Mode) oder GCM (Galois/Counter). Modus).
-
Authentifizierung: Berechnen Sie einen MAC (Message Authentication Code) für die verschlüsselte Zeichenfolge mit HMAC-SHA-256. Kombinieren Sie die verschlüsselte Zeichenfolge und den MAC, um das endgültige verschlüsselte Ergebnis zu generieren.
Entschlüsselungsprozess
-
Authentifizieren: Neu berechnen Suchen Sie nach dem MAC für das verschlüsselte Ergebnis und vergleichen Sie es mit dem enthaltenen MAC. Abbrechen, wenn sie unterschiedlich sind.
-
Entschlüsseln:Entschlüsseln Sie die verschlüsselte Zeichenfolge mit dem richtigen Schlüssel.
Wichtige Überlegungen
- Verwenden Sie authentifizierte Verschlüsselungsalgorithmen (z. B. AES-GCM, ChaCha20-Poly1305) sowohl für die Verschlüsselung als auch für die Authentifizierung.
- Verwenden Sie sichere Bibliotheken wie libsodium oder defuse/php-encryption für robuste Verschlüsselungs- und Entschlüsselungsfunktionen.
- Vermeiden Sie die Einführung Ihrer eigenen Kryptografie aufgrund potenzieller Sicherheitsrisiken.
- Generieren Sie IVs (Initialisierungsvektoren) mit einem CSPRNG (Cryptographically Secure Pseudo-Random Number Generator) wie random_bytes oder Sodium_randombytes.
- Schützen Sie Verschlüsselungsschlüssel mit Vorsicht. Erwägen Sie die Verwendung eines Schlüsselverschlüsselungsschlüssels oder eines sicheren Schlüsselverwaltungssystems.
Beispiel für die Verwendung von Libsodium:
<?php
use Sodium\Crypto;
function encrypt(string $message, string $key): string
{
$nonce = random_bytes(Crypto::SECRETBOX_NONCEBYTES);
$encrypted = Crypto::secretbox($message, $nonce, $key);
return base64_encode($nonce . $encrypted);
}
function decrypt(string $encrypted, string $key): string
{
$decoded = base64_decode($encrypted);
$nonce = substr($decoded, 0, Crypto::SECRETBOX_NONCEBYTES);
$ciphertext = substr($decoded, Crypto::SECRETBOX_NONCEBYTES);
$decrypted = Crypto::secretbox_open($ciphertext, $nonce, $key);
return $decrypted;
}
$message = 'Hello, world!';
$key = random_bytes(Crypto::SECRETBOX_KEYBYTES);
$encrypted = encrypt($message, $key);
$decrypted = decrypt($encrypted, $key);
var_dump($encrypted);
var_dump($decrypted);
Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonWie kann ich Strings in PHP sicher verschlüsseln und entschlüsseln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!