Aktueller Standort: Startseite> Neueste Artikel> Ist es in Ordnung, Crypt () mit Passage_verify () zu verwenden?

Ist es in Ordnung, Crypt () mit Passage_verify () zu verwenden?

M66 2025-06-06

Bei Kennworthashing und Überprüfung in PHP werden Crypt () und passwart_verify () zwei häufig genannte Funktionen. Obwohl sie alle die Verarbeitung der Kennwortsicherheit beinhalten, werden sie unterschiedlich verwendet und für verschiedene Zwecke ausgelegt. Daher können Entwickler fragen:

1. Überblick über die Funktion crypt ()

Crypt () ist eine Funktion, die in PHP verwendet wird, um Kennwörter in den frühen Tagen zu verschlüsseln. Es unterstützt eine Vielzahl von Algorithmen wie:

  • DES (Standard)

  • MD5 (beginnend mit $ 1 $ )

  • Blowfish (Beginnen Sie mit $ 2A $ , $ 2y $ $ usw.)

  • SHA-256, SHA-512 (beginnend mit $ 5 $ , 6 $ $ )

Eine typische Krypta () -Beutzung lautet wie folgt:

 $password = 'mySecret';
$salt = '$2y$10$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
$hash = crypt($password, $salt);

2. Das Prinzip von password_verify ()

password_verify () ist eine in PHP 5.5 eingeführte Funktion und wurde speziell für die Validierung von Hashes entwickelt, die mit password_hash () generiert werden. Es identifiziert automatisch den Algorithmus, der von Hashing (wie Bcrypt, Argon2) verwendet wird, und vergleicht ihn nach dem eingegebenen Klartextkennwort.

 if (password_verify('mySecret', $hashFromDatabase)) {
    echo 'Richtiges Passwort';
}

3.. Kann Crypt () und Passage_verify () in Kombination verwendet werden?

Kurze Antwort: Nicht empfohlen, und es macht keinen Sinn.

Obwohl Password_verify () den zugrunde liegenden Mechanismus ähnlich wie Crypt () aufruft, unterstützt es nur das Hash -Format, das durch seine "Haushaltsfunktion" -Funktion password_hash () generiert wird. Wenn Sie Crypt () verwenden, um den Hash anzupassen und dann Password_verify () zu überprüfen, treten die folgenden Probleme auf:

  • Wenn das Hash -Format nicht erfüllt Passwort_verify () Erwartungen, gibt es false zurück.

  • PHP garantiert keine Unterstützung für nicht standardmäßige Format-Hashes, die von Crypt () in zukünftigen Versionen generiert wurden.

  • password_verify () wird möglicherweise überhaupt nicht für den Hash des falschen Formats analysiert, was dazu führt, dass die Überprüfung immer fehlschlägt.

Mit anderen Worten, obwohl die beiden verwandt sind, sind sie keine funktionellen Paare, die als interoperabel ausgelegt sind.

4. Sicherheitsvergleich

Risiken der Verwendung von Crypt () :

  • Manuell Salzwerte und Algorithmusauswahl verwalten, was anfällig für Fehler ist.

  • Wenn Sie nicht ordnungsgemäß verwendet werden (z. B. die Verwendung des Standard-Des-Algorithmus oder des schwachen Salzwerts), sind Sie anfällig für Brute-Force-Risse.

  • Es gibt keinen Mechanismus für den automatischen Update -Algorithmus.

  • Zukünftige Kompatibilität kann nicht garantiert werden.

Vorteile der Verwendung von password_hash () und password_verify () :

  • Wählen Sie automatisch Sicherheits -Standard -Algorithmen (z. B. Bcrypt);

  • Automatisch Salzwerte erzeugen;

  • Der Algorithmus ist gut eingekapselt, und Entwickler müssen sich nicht um die zugrunde liegende Umsetzung kümmern.

  • Der Glättungsalgorithmus kann über password_needs_rehash () aktualisiert werden.

  • Sicherheit wird nach modernen Maßstäben überprüft.

5. Empfohlene Praktiken

Für eine bessere Sicherheit und zukünftige Kompatibilität wird empfohlen, immer password_hash () mit Password_verify () zu verwenden :

 // Beim Registrieren oder Ändern des Passworts
$hash = password_hash('mySecret', PASSWORD_DEFAULT);

// Überprüfen Sie bei der Anmeldung
if (password_verify('mySecret', $hash)) {
    // Überprüfung ist erfolgreich
}

Wenn Sie Crypt () in Ihrem alten System verwenden, wird empfohlen, password_hash () zu verwenden, um den Hash zu regenerieren, nachdem der Benutzeranmeldung erfolgreich ist, und den Wert in der Datenbank zu aktualisieren. Dieser Ansatz kann allmählich reibungslos zu einer sichereren Verschlüsselungsmethode übergehen.

6. Schlussfolgerung

Obwohl Crypt () ein Veteran in PHP ist, wurde es im Feld der Kennwortverarbeitung allmählich durch moderner und sicherer password_hash () und password_verify () ersetzt. Die Verwendung von Crypt () und passwart_verify () in Kombination bringt nicht die erwartete Sicherheitsverbesserung mit sich, kann jedoch aufgrund von Inkompatibilität einen Verifizierungsfehler und andere Probleme verursachen. Daher besteht die beste Praxis darin, die von PHP bereitgestellte Funktion password_series vollständig zu übernehmen, um das Benutzerkennwort zu verarbeiten *, um die Sicherheit und Wartbarkeit des Systems zu gewährleisten.

Für weitere Sicherheitsmaßnahmen können Sie den Argon2 -Algorithmus in Kombination verwenden: