Heim >Backend-Entwicklung >PHP-Tutorial >Wie verschlüssele und entschlüssele ich PHP-Strings sicher mit Libsodium oder defuse/php-encryption?

Wie verschlüssele und entschlüssele ich PHP-Strings sicher mit Libsodium oder defuse/php-encryption?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-18 00:26:10117Durchsuche

How to Securely Encrypt and Decrypt PHP Strings Using Libsodium or defuse/php-encryption?

PHP-Strings verschlüsseln und entschlüsseln

Frage:
Wie können wir einen PHP-String ver- und entschlüsseln? Für beide sind sowohl eine Originalzeichenfolge als auch ein Salz oder ein Schlüssel erforderlich Prozesse?

Antwort:
Es ist wichtig, den Unterschied zwischen Verschlüsselung und Authentifizierung zu verstehen, bevor Sie fortfahren. Für eine robuste Sicherheit empfehlen wir die verschlüsselte Authentifizierung, die eine Verschlüsselung und anschließende Authentifizierung umfasst.

Vermeiden Sie die Erstellung einer eigenen Kryptografie; Nutzen Sie stattdessen eine zuverlässige Bibliothek, die von Kryptographie-Spezialisten entwickelt wurde. Aufgrund der Benutzerfreundlichkeit und der integrierten authentifizierten Verschlüsselung empfehlen wir dringend die Verwendung von libsodium oder defuse/php-encryption.

Verschlüsselungsschritte:

  1. Verwenden Sie AES im CTR-Modus zur Verschlüsselung.
  2. Authentifizieren Sie den Chiffretext mit HMAC-SHA-256 (oder Poly1305).

Entschlüsselungsschritte:

  1. Berechnen Sie den MAC des Chiffretexts neu und vergleichen Sie ihn mit dem ursprünglichen MAC. Bei Nichtübereinstimmung abbrechen.
  2. Fahren Sie mit der Entschlüsselung fort.

Designüberlegungen:

  1. Vermeiden Sie die Komprimierung von Chiffretext.
  2. Verwenden Sie mb_strlen() und mb_substr() mit dem „8bit“-Zeichen Set-Modus.
  3. Verwenden Sie ein CSPRNG, um IVs zu generieren. Vermeiden Sie MCRYPT_RAND.
  4. Verschlüsseln Sie immer vor der Authentifizierung (es sei denn, Sie verwenden AEAD).
  5. Achten Sie auf Sicherheitslücken beim Cache-Timing.

Wann Sie die Verschlüsselung nicht verwenden sollten:

  • Passwortspeicherung (Passwort-Hashing verwenden). Algorithmen wie Argon2)
  • URL-Parameterverschlüsselung (ungeeignetes Tool)

Libsodium PHP-Beispiel:

function safeEncrypt(string $message, string $key): string
{
    if (mb_strlen($key, '8bit') !== SODIUM_CRYPTO_SECRETBOX_KEYBYTES) {
        throw new RangeException('Key is not the correct size (must be 32 bytes).');
    }
    $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    $cipher = base64_encode(
        $nonce.
        sodium_crypto_secretbox(
            $message,
            $nonce,
            $key
        )
    );
    return $cipher;
}

Libsodium Entschlüsselung:

function safeDecrypt(string $encrypted, string $key): string
{
    $decoded = base64_decode($encrypted);
    $nonce = mb_substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, '8bit');
    $ciphertext = mb_substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES, null, '8bit');
    $plain = sodium_crypto_secretbox_open(
        $ciphertext,
        $nonce,
        $key
    );
    return $plain;
}

defuse/php-encryption Beispiel:

use Defuse\Crypto\Crypto;
use Defuse\Crypto\Key;

$message = 'We are all living in a yellow submarine';
$key = Key::createNewRandomKey();
$ciphertext = Crypto::encrypt($message, $key);
$plaintext = Crypto::decrypt($ciphertext, $key);

Das obige ist der detaillierte Inhalt vonWie verschlüssele und entschlüssele ich PHP-Strings sicher mit Libsodium oder defuse/php-encryption?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn