Aktueller Standort: Startseite> Neueste Artikel> Erstellen Sie einen benutzerdefinierten Verschlüsselungsprozess, um Crypt () und OpenSSL_* zu mischen

Erstellen Sie einen benutzerdefinierten Verschlüsselungsprozess, um Crypt () und OpenSSL_* zu mischen

M66 2025-05-28

Beim Erstellen sicherer PHP -Anwendungen konfrontiert Entwickler häufig die Verschlüsselungsanforderungen, einschließlich Datenspeicherverschlüsselung, Benutzerkennwortschutz, Datenübertragungsverschlüsselung usw. PHP unterstützt nativ eine Vielzahl von Verschlüsselungsmethoden, darunter die Crypt () -Funktion für das Hashing von Passworts, während die OpenSSL_* -Serie -Funktion für symmetrische und asymmetrische Enkwyption, Schlüsselerzeugung geeignet ist.

In diesem Artikel werden wir CryPT () und OpenSSL_* -Funktionen verwenden, um einen benutzerdefinierten Verschlüsselungsprozess zu erstellen, um sowohl die Sicherheitssicherheit als auch die Datenverschlüsselungsflexibilität des Kennworts zu berücksichtigen.

1. Ideen für den benutzerdefinierten Verschlüsselungsprozess

Wir hoffen, die folgenden Ziele zu erreichen:

  1. Benutzerkennwort Hashing - Verwenden Sie Crypt () , um irreversible Hashing durchzuführen.

  2. Datenverschlüsselung - Verschlüsseln Sie benutzersensible Daten mithilfe der openSSL -symmetrischen Verschlüsselungsalgorithmus;

  3. Schlüsselschutz - Generieren und Verwalten von Schlüssel, um die Sicherheit des Verschlüsselungsprozesses zu gewährleisten.

  4. Datenentschlüsselung - Der Chiffretext kann in PlainText wiederhergestellt werden, vorausgesetzt, es gibt den richtigen Schlüssel.

2. Passwort Hash: Verwenden Sie Crypt ()

Crypt () ist eine Funktion für Hashing -Passwörter. Wir empfehlen, den Bcrypt -Algorithmus zu verwenden, einem bewährten Algorithmus für das Passworthashing.

 function hash_password($password) {
    $salt = '$2y$10$' . substr(str_replace('+', '.', base64_encode(random_bytes(16))), 0, 22);
    return crypt($password, $salt);
}

Passwort überprüfen:

 function verify_password($password, $hash) {
    return crypt($password, $hash) === $hash;
}

3. symmetrische Verschlüsselung: Verwenden Sie OpenSSL_encrypt ()

Um benutzerempfindliche Daten wie E-Mail- und ID-Nummer zu verschlüsseln, verwenden wir die symmetrische Verschlüsselungsmethode von OpenSSL wie AES-256-CBC .

Verschlüsselungsfunktion:

 function encrypt_data($plaintext, $key) {
    $iv_length = openssl_cipher_iv_length('AES-256-CBC');
    $iv = openssl_random_pseudo_bytes($iv_length);
    $ciphertext = openssl_encrypt($plaintext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
    return base64_encode($iv . $ciphertext);
}

Entschlüsselungsfunktion:

 function decrypt_data($encrypted, $key) {
    $data = base64_decode($encrypted);
    $iv_length = openssl_cipher_iv_length('AES-256-CBC');
    $iv = substr($data, 0, $iv_length);
    $ciphertext = substr($data, $iv_length);
    return openssl_decrypt($ciphertext, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
}

4. Verschlüsselungsschlüssel erzeugen

Sie können OpenSSL_RANDOM_PSEUDO_BYTES () verwenden, um einen Sicherheitsschlüssel zu generieren:

 function generate_secure_key($length = 32) {
    return base64_encode(openssl_random_pseudo_bytes($length));
}

In realen Projekten sollten Sie einen sicheren Weg verwenden, um Ihre Schlüssel zu speichern, z. B. die Verwendung von Umgebungsvariablen oder wichtigen Verwaltungsdiensten, anstatt in Ihrem Code fest codiert zu werden.

5. Beispiele für praktische Verwendung

 $password = 'myStrongPassword123!';
$hashed = hash_password($password);

if (verify_password('myStrongPassword123!', $hashed)) {
    echo "Passwortüberprüfung bestanden\n";
}

$key = base64_decode('pL2u0xJNzYX2+x5sK8Xt5c34BLTPWhMHn0h0snA4MlQ='); // Beispielschlüssel
$secret = 'Benutzer -E -Mail: user@example.com';
$encrypted = encrypt_data($secret, $key);
$decrypted = decrypt_data($encrypted, $key);

echo "Verschlüsselte Daten: $encrypted\n";
echo "Entschlüsselte Daten: $decrypted\n";

6. Sicherheitsberatung

  1. Verwenden Sie HTTPS für die Datenübertragung, und verschlüsselte Daten sollten nicht über einfache Textkanäle gesendet werden.

  2. Das Schlüsselmanagement ist der Kern der Systemsicherheit, und es wird empfohlen, mit Sicherheitsmodulen wie Hashicorp -Gewölbe zusammenzuarbeiten.

  3. Regelmäßig Schlüsseln und Algorithmen drehen;

  4. Niemals den Verschlüsselungsschlüssel in ein Git-Repository- oder Front-End-Code harten.

  5. Regelmäßig den Verschlüsselungsprozess und den zeitnahen Patch bekannten Schwachstellen prüfen.

7. Anwendungsszenario -Erweiterung

Diese Kombination von Crypt () und OpenSSL_* eignet sich für Szenarien, in denen die Benutzerauthentifizierung und die sensible Datenverschlüsselung erforderlich sind, z. B.:

  • Verschlüsselter Speicher von Bankkartennummer und ID -Karte;

  • Schutz des Benutzer -Chat -Verlaufs oder privaten Informationen;

  • Erstellen Sie einen Mehrschicht-Sicherheitsmechanismus, um Benutzerkennwörter und Daten zu trennen.

  • Entschlüsseln und analysieren Sie verschlüsselte Daten im Hintergrund regelmäßig (äußerst sorgfältig über wichtige Leckageprobleme).

8. Schlussfolgerung

Durch die Kombination der irreversiblen Hashing -Funktion von Crypt () und der symmetrischen Verschlüsselungsfähigkeit von OpenSSL können wir ein relativ vollständiges und sicheres Verschlüsselungssystem festlegen, das für die Verwaltung des Benutzerkennworts geeignet ist und den Anforderungen des Datenverschlüsselungsspeichers entspricht. Mit der Entwicklung der geschäftlichen Bedürfnisse und der Sicherheitsbedrohungen hat diese Lösung auch eine gute Skalierbarkeit.

Weitere relevante Implementierungspläne und Best Practices finden Sie in offiziellen Dokumentations- oder Community -Diskussionsplattformen, wie z. B.: