In PHP ist die Crypt () -Funktion ein wichtiges Instrument für die Hash-Verschlüsselung, das eine Vielzahl von Verschlüsselungsalgorithmen unterstützt, einschließlich Blowfish (normalerweise als $ 2y $ ) und SHA-512 (verwendet als $ 6 $ ). Beide Algorithmen werden häufig für das Kennworthashing und die Überprüfung verwendet, unterscheiden sich jedoch erheblich in der Leistung und den anwendbaren Szenarien. In diesem Artikel wird der Leistungsvergleich von Blowfish und SHA-512 in der PHP Crypt () -Funktion im Detail erörtert und seine Vor- und Nachteile anhand von Beispielen analysiert.
Blowfish ist ein symmetrischer Schlüsselbasis-Verschlüsselungsalgorithmus, der in PHP als eine der Implementierungen von BCrypt verwendet wird, um starke Hash-Werte zu erzeugen. BCrypt ist für das Kennworthashing mit einem Standardkostenfaktor von 10 ausgelegt, was bedeutet, dass der Berechnungsprozess absichtlich verzögert wird, um das Knacken von Brute-Force-Rissen zu verhindern.
Für Passwörter entwickelt : BCRYPTs Designziel ist Passworthashing, das Regenbogentischen und Brute -Force -Cracking widerstehen kann.
Einstellbarer Kostenfaktor : Durch Erhöhung der Kostenparameter kann der Hashing -Schwierigkeitsgrad verbessert werden.
Stabile Leistung : In den meisten Fällen ist die Ausführungszeit relativ stabil, was dazu beiträgt, Zeitangriffe zu vermeiden.
$password = 'mypassword';
$hash = crypt($password, '$2y$10$usesomesillystringforsalt$');
echo $hash;
SHA-512 ist Mitglied der SHA-2-Familie und eine allgemeinere Hash-Funktion, die hauptsächlich für die Überprüfung der Datenintegrität verwendet wird, anstatt speziell für das Passworthashing zu entwickeln. Es wird auch in der Crypt () von PHP unterstützt, seine Sicherheit hängt jedoch vom Salzwert- und Anwendungskontext ab.
Schnelle Geschwindigkeit : SHA-512 ist schneller zu berechnen als Blowfish und ist zum schnellen Hashing von Nicht-Password-Daten geeignet.
Algorithmus -Standardisierung : Es handelt sich um einen Standard -Hashing -Algorithmus, der von NIST empfohlen wird und in den Signaturen der Dateiüberprüfung häufig verwendet wird.
Mangel an Kostenfaktorkontrolle : Im Gegensatz zu Blowfish kann SHA-512 die berechneten Kosten nicht einfach einstellen.
Anfälliger für Brute-Force-Angriffe : Aufgrund der schnellen Rechengeschwindigkeit wird es zu einem potenziellen Sicherheitsrisiko für das Passworthashing.
$password = 'mypassword';
$hash = crypt($password, '$6$rounds=5000$usesomesillystringforsalt$');
echo $hash;
Um die Leistungsunterschiede zwischen Blowfish und SHA-512 zu bewerten, können wir die folgenden Tests in derselben Serverumgebung durchführen:
$start = microtime(true);
crypt('mypassword', '$2y$10$usesomesillystringforsalt$');
$blowfish_time = microtime(true) - $start;
$start = microtime(true);
crypt('mypassword', '$6$rounds=5000$usesomesillystringforsalt$');
$sha512_time = microtime(true) - $start;
echo "BlowfishZeit:{$blowfish_time} Zweite\n";
echo "SHA-512Zeit:{$sha512_time} Zweite\n";
Im Allgemeinen ist die Ausführungszeit von Blowfish in der Regel mehrmals die von SHA-512. Diese "Langsamkeit" ist zwar (für die erweiterte Sicherheit) entwickelt, aber es kann sich bei der Behandlung einer großen Anzahl von Anfragen auswirken.
Wenn Sie ein Benutzeranmeldesystem entwickeln, wird empfohlen, Blowfish (BCRYPT) zu verwenden, da es sicherer ist und einen Brute-Force-Widerstand hat.
Wenn Sie nur einen schnellen Hash benötigen, z. B. eine eindeutige Identifikationsgenerierung für nicht sensitive Daten, können Sie SHA-512 verwenden.
Es ist erwähnenswert, dass ab PHP 5.5 empfohlen wird, password_hash () und passwart_verify () anstelle von crypt () zu verwenden, damit die Kennwort -Hash -Logik einfacher und sicher verwaltet werden kann.
$hash = password_hash('mypassword', PASSWORD_BCRYPT);
if (password_verify('mypassword', $hash)) {
echo 'Richtiges Passwort';
}
Obwohl die Crypt () -Funktion immer noch unterstützt und für das Kennworthashing verwendet wird, sollte die Auswahl zwischen Blowfish und SHA-512 auf dem spezifischen Anwendungsszenario basieren. Blowfish bietet eine stärkere Sicherheit für das Passwort, während SHA-512 in Bezug auf Geschwindigkeit am besten ist. In Szenarien, in denen die Passwortsicherheit benötigt wird, sollte Blowfish in Kombination mit modernen PHP-Kennwortverarbeitungsfunktionen bevorzugt und verwendet werden, um die langfristige Sicherheit und Wartung des Systems sicherzustellen.
Für Entwickler, die in Webauthentifizierungssystemen Passworthashing verwenden, finden Sie in der folgenden URL weitere Best Practices:
https://m66.net/security/password-hashing