string hash_pbkdf2 (
string $algo,
string $password,
string $salt,
int $iterations,
int $length = 0,
bool $raw_output = false
)
$ algo : Gibt den verwendeten Hashing -Algorithmus wie SHA256 , SHA1 usw. an. Es muss ein von PHP unterstütztes Algorithmus sein.
$ Passwort : Originalkennwort oder Schlüssel.
$ salt : Zufallssalzwert, um zu verhindern, dass dasselbe Passwort denselben Hash generiert.
$ iterations : Die Anzahl der Iterationen, je größer die Sicherheit, desto höher der Leistungsverbrauch.
$ Länge : Die Ausgabetaste Länge, Standardeinstellung 0 repräsentiert die Standardlänge des Ausgangs -Hash -Algorithmus.
$ RAW_OUTPUT : Ob ein binäres Format ausgibt, Standardfehler, um die hexadezimale Zeichenfolge auszugeben.
hash_pbkdf2('sha999', 'password', 'salt', 1000);
Fehlerursache: SHA999 ist kein gültiger Algorithmus, der Anruf fehlschlägt oder eine Warnung wird geworfen.
Lösung : Rufen Sie Hash_algos () auf, um die Liste der unterstützten Algorithmen zu erhalten und den richtigen Algorithmus auszuwählen.
hash_pbkdf2('sha256', 'password', 'salt', 0);
Fehlerursache: Die Anzahl der Iterationen muss eine positive Ganzzahl sein, 0 oder negative Zahlen sind ungültig, was zu einer extrem niedrigen Sicherheit führen kann.
Lösung : Die Anzahl der Iterationen sollte auf mindestens 1000 eingestellt werden, und der spezifische Wert sollte entsprechend den Anforderungen an die Anwendungssicherheit angepasst werden.
hash_pbkdf2('sha256', 'password', 'salt', 1000, 99999);
Fehlerursache: Eine übermäßig große Länge kann zu einem leeren String- oder Leistungs Engpass führen.
Lösung : Es wird empfohlen, dass die allgemeine Ausgangslänge nicht mehrmals die maximale Ausgangslänge des Hash -Algorithmus überschreitet. Wenn die Ausgangslänge von SHA256 32 Bytes beträgt, sollte dies bei der Festlegung von $ Länge angemessen sein.
hash_pbkdf2('sha256', 'password', 'salt', 1000, 64, 'true');
Fehlerursache: $ raw_output sollte ein boolescher Wert sein. Wenn Sie in eine Zeichenfolge eingehen, wird das erwartete Ausgangsformat nicht erfüllt.
Problemumgehung : Explizit in wahren oder falschen booleschen Typ.
$algos = hash_algos();
print_r($algos);
Überprüfen Sie, welche Hash -Algorithmen in der aktuellen PHP -Umgebung unterstützt werden, um Parameterfehler zu vermeiden.
Drucken Sie die Parameter vor dem Aufrufen und bestätigen Sie, dass der Parameterwert korrekt ist.
$algo = 'sha256';
$password = 'myPassword';
$salt = 'randomSalt';
$iterations = 1000;
$length = 64;
var_dump($algo, $password, $salt, $iterations, $length);
$key = hash_pbkdf2($algo, $password, $salt, $iterations, $length, false);
echo $key;
Beobachten Sie die Zeit, die nach der Anzahl der Iterationen aufgewendet wurde, die die Zeitablauffunktion festgelegt haben, um den Gleichgewichtspunkt zwischen Sicherheit und Leistung zu finden.
$start = microtime(true);
hash_pbkdf2('sha256', 'password', 'salt', 10000);
$end = microtime(true);
echo "zeitaufwendig:" . ($end - $start) . "Zweite";
Bestätigen Sie, ob die Ausgabeergebnisse die erwartete Länge und das erwartete Format (hexadezimal oder binär) erfüllen.
$algo = 'sha256';
$password = 'user_password';
$salt = 'unique_salt_value';
$iterations = 10000;
$length = 64; // 64Hexadezimalfiguren,gleich32Byte
$raw_output = false;
$derived_key = hash_pbkdf2($algo, $password, $salt, $iterations, $length, $raw_output);
echo "Abgeleitete Schlüssel:" . $derived_key;
Beachten Sie, dass das Salz hier einzigartig und zufällig sein muss, mit angemessener Anzahl von Iterationen und der Algorithmus besteht.
Stellen Sie bei Verwendung von Hash_PBKDF2 sicher, dass der Hash -Algorithmus gültig ist.
Die Anzahl der Iterationen sollte vernünftigerweise festgelegt werden, um Sicherheit und Leistung zu gewährleisten.
Die Ausgangslänge und die Formatparameter müssen mit den Erwartungen übereinstimmen.
Während des Debuggens können Hash_Algos () , VAR_DUMP- und Timing -Funktionen verwendet werden, um die Positionierungsprobleme zu unterstützen.
Durch das Beherrschen dieser können Sie Sicherheitsrisiken und Programmstörungen vermeiden, die durch Parameterfehler verursacht werden.