Aktueller Standort: Startseite> Neueste Artikel> Wie verschlüsseln Sie Zeichenfolgen und gewährleisten die Sicherheit mit der PHP -Krypta -Funktion?

Wie verschlüsseln Sie Zeichenfolgen und gewährleisten die Sicherheit mit der PHP -Krypta -Funktion?

gitbox 2025-09-02

1. Einführung in Krypta -Funktionen

Die Krypta -Funktion in PHP wird verwendet, um Zeichenfolgen zu verschlüsseln. Es erzeugt Verschlüsselungsergebnisse basierend auf verschiedenen Verschlüsselungsalgorithmen (wie DES, Blowfish, MD5 usw.). Die Krypta -Funktion wird häufig verwendet, um Kennwortdaten zu verarbeiten, da sie die Sicherheit der Kennwortverschlüsselung mit einem Salzwert verbessern und so einige gemeinsame Angriffsmethoden wie Regenbogentabellenangriffe verhindert.

Krypta -Funktionssyntax:

 <span><span><span class="hljs-title function_ invoke__">crypt</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$salt</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>
</span></span>
  • $ str ist die Klartext -Zeichenfolge, die Sie verschlüsseln möchten (z. B. das vom Benutzer eingegebene Kennwort).

  • $ salt ist eine zufällige Zeichenfolge, die zur Erhöhung der Kennwortsicherheit verwendet wird. Unterschiedliche Verschlüsselungsalgorithmen erfordern unterschiedliche Salzformate.

Der Rückgabewert ist eine verschlüsselte Zeichenfolge.


2. Grundes Beispiel für die Verschlüsselung von Zeichenfolgen mit Krypta

Schauen wir uns zunächst ein einfaches Beispiel an, um zu demonstrieren, wie das vom Benutzer eingegebene Kennwort mit der Krypta -Funktion verschlüsselt wird:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Vom Benutzer eingegebenes Passwort</span></span><span>
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">"userpassword"</span></span><span>;

</span><span><span class="hljs-comment">// verwenden DES Verschlüsselungsalgorithmus,und geben Sie den Salzwert an</span></span><span>
</span><span><span class="hljs-variable">$salt</span></span><span> = </span><span><span class="hljs-string">"<span class="hljs-subst">$1</span></span></span><span>$".</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-title function_ invoke__">md5</span></span><span>(</span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>()), </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">8</span></span><span>);  </span><span><span class="hljs-comment">// verwenden MD5 Erzeugen Sie zufällige Salzwerte</span></span><span>
</span><span><span class="hljs-variable">$encrypted_password</span></span><span> = </span><span><span class="hljs-title function_ invoke__">crypt</span></span><span>(</span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$salt</span></span><span>);

</span><span><span class="hljs-comment">// Ausgangsverschlüsselungsergebnisse</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Encrypted Password: "</span></span><span> . </span><span><span class="hljs-variable">$encrypted_password</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

In diesem Beispiel verwenden wir $ 1 $ , um den MD5 -Verschlüsselungsalgorithmus darzustellen (dies ist das Standardformat für Krypta ). Die Komplexität der Verschlüsselung wird hinzugefügt, indem der Salzwert an das Kennwort angehängt wird.


3. Die Rolle von Salz bei der Verschlüsselung

Der Salzwert ist ein sehr wichtiger Bestandteil des Verschlüsselungsprozesses. Es kann effektiv verhindern, dass dasselbe Passwort zweimal dasselbe Verschlüsselungsergebnis generiert. Durch die Verwendung unterschiedlicher Salzwerte jedes Mal, selbst wenn die Passwörter zweier Benutzer gleich sind, sind ihre Verschlüsselungsergebnisse unterschiedlich und erhöhen die Schwierigkeit, Passwörter zu knacken.

In Krypta -Funktionen muss der Salzwert sorgfältig entwickelt werden, um sicherzustellen, dass er ausreichend Zufälligkeit aufweist. Der Salzwert sollte nicht zu einfach sein, z. B. die Verwendung eines Benutzernamens oder einer festen Zeichenfolge als Salzwert.


4. Empfohlener Verschlüsselungsalgorithmus

Die PHP -Krypta -Funktion unterstützt eine Vielzahl von Verschlüsselungsalgorithmen. Zu den allgemeinen gehören:

  • DES ( $ 1 $ bedeutet MD5 -Verschlüsselung)

  • Blowfish ( $ 2A $ bedeutet Blowfish -Verschlüsselung)

  • SHA-256 ( $ 5 $ bedeutet SHA-256-Verschlüsselung)

  • SHA-512 ( $ 6 $ bedeutet SHA-512 Verschlüsselung)

Unter ihnen bieten SHA-256 und SHA-512 eine hohe Verschlüsselungsstärke, die für die hochfeste Verschlüsselung von Kennwörtern geeignet ist. Um die Sicherheit der Verschlüsselung zu gewährleisten, wird empfohlen, einen dieser beiden Algorithmen so weit wie möglich auszuwählen.

Verschlüsseln Sie Kennwörter mit dem Blowfish -Algorithmus:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$password</span></span><span> = </span><span><span class="hljs-string">"userpassword"</span></span><span>;
</span><span><span class="hljs-variable">$salt</span></span><span> = </span><span><span class="hljs-string">"<span class="hljs-subst">$2y</span></span></span><span><span class="hljs-subst">$10</span></span><span>$".</span><span><span class="hljs-title function_ invoke__">substr</span></span><span>(</span><span><span class="hljs-title function_ invoke__">md5</span></span><span>(</span><span><span class="hljs-title function_ invoke__">mt_rand</span></span><span>()), </span><span><span class="hljs-number">0</span></span><span>, </span><span><span class="hljs-number">22</span></span><span>); </span><span><span class="hljs-comment">// erzeugen Blowfish Salzwert</span></span><span>
</span><span><span class="hljs-variable">$encrypted_password</span></span><span> = </span><span><span class="hljs-title function_ invoke__">crypt</span></span><span>(</span><span><span class="hljs-variable">$password</span></span><span>, </span><span><span class="hljs-variable">$salt</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Encrypted Password (Blowfish): "</span></span><span> . </span><span><span class="hljs-variable">$encrypted_password</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

5. Verwenden Sie die Krypta -Funktion, um das Passwort zu überprüfen

Wie überprüfen Sie nach dem Verschluss des Passworts das Kennwort, wenn sich der Benutzer anmeldet? Sie können das verschlüsselte Kennwort in der Datenbank speichern. Wenn sich der Benutzer anmeldet, verschlüsseln Sie das vom Benutzer eingegebene Kennwort über die Krypta -Funktion, um zu überprüfen, ob die Verschlüsselungsergebnisse übereinstimmen.

Beispiel für das Überprüfungskennwort:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Angenommen, das aus der Datenbank erhaltene verschlüsselte Passwort</span></span><span>
</span><span><span class="hljs-variable">$stored_encrypted_password</span></span><span> = </span><span><span class="hljs-string">"<span class="hljs-subst">$2y</span></span></span><span><span class="hljs-subst">$10</span></span><span><span class="hljs-subst">$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</span></span><span>"; </span><span><span class="hljs-comment">// Verschlüsselungskennwort vor der Save</span></span><span>

</span><span><span class="hljs-comment">// Das vom Benutzer eingegebene Klartextkennwort</span></span><span>
</span><span><span class="hljs-variable">$user_input_password</span></span><span> = </span><span><span class="hljs-string">"userpassword"</span></span><span>;

</span><span><span class="hljs-comment">// verwenden相同的Salzwert对Vom Benutzer eingegebenes Passwort进行加密</span></span><span>
</span><span><span class="hljs-variable">$encrypted_input_password</span></span><span> = </span><span><span class="hljs-title function_ invoke__">crypt</span></span><span>(</span><span><span class="hljs-variable">$user_input_password</span></span><span>, </span><span><span class="hljs-variable">$stored_encrypted_password</span></span><span>);

</span><span><span class="hljs-comment">// Vergleichen Sie, ob das verschlüsselte Passwort übereinstimmt</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$encrypted_input_password</span></span><span> === </span><span><span class="hljs-variable">$stored_encrypted_password</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is correct!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Password is incorrect!"</span></span><span>;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

6. Stellen Sie die Sicherheit des Verschlüsselungsprozesses sicher

Um die Sicherheit des Verschlüsselungsprozesses zu gewährleisten, müssen zusätzlich zur rationalen Verwendung von Krypta -Funktionen die folgenden Best Practices befolgt werden:

  1. Verwenden Sie einen starken Salzwert : Der Salzwert sollte zufällig genug und lang genug sein (z. B. 22 Bit). Vermeiden Sie es, einfache Zeichenfolgen wie Benutzername oder E -Mail -Adresse zu verwenden.

  2. Verwenden Sie geeignete Verschlüsselungsalgorithmen : Moderne Verschlüsselungsalgorithmen wie SHA-256 oder SHA-512 werden empfohlen. Vermeiden Sie eine schwache Verschlüsselung.

  3. Vermeiden Sie die Wiederverwendung von Salzwerten : Jedes Passwort sollte einen eindeutigen Salzwert verwenden, wodurch Regenbogentischangriffe vermieden werden können.

  4. Speichern verschlüsseltes Passwort : Speichern Sie keine Klartextkennwörter in der Datenbank. Das verschlüsselte Passwort sollte gespeichert und das eingegebene Passwort mit demselben Salzwert verglichen werden, der während der Überprüfung verschlüsselt ist.

  5. Regelmäßige Aktualisierung von Verschlüsselungsmethoden : Wenn die Rechenleistung zunimmt, können einige Verschlüsselungsalgorithmen anfällig werden, sodass die Verschlüsselungsmethode regelmäßig ausgewertet und aktualisiert werden muss.