Ich lerne über PHP crypt() -Funktion und habe einige Tests mit ihm ausgeführt. Nach this post sollte ich ein Salz verwenden, das 22 Zeichen lang ist. Ich kann jedoch eine Zeichenfolge verwenden, die 23 Zeichen lang ist, mit einigen Einschränkungen. Wenn ich eine 22 Zeichen lange Zeichenfolge verwende, bekomme ich immer ein Ergebnis von '$ 2y $ xxStringStringStriStri.HashHashHashHashHashHashHashHas'. Ich weiß, dass die Zeit nur ein Teil des Salzes ist.Warum sollte ich nicht das 23. Zeichen in einer crypt() - Funktion verwenden?
Es scheint, dass wenn ich 23 statt 22 Zeichen verwende, kann ich erfolgreich verschiedene Hashes generieren, aber es gibt nur 4 verschiedene Ergebnisse für alle 64 Zeichen. Die 23. Zeichen „rundet“ auf die nächste 1/4 der 64 Zeichenalphabet (zum Beispiel die 23. Zeichen „W“ und rundet auf „O“ oder eine beliebige Zahl abrundet zu „u“)
v---------------v---------------v---------------v---------------
./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890
Alle vier dieser Krypta Funktionen erzeugen die gleiche Salz:
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAq');
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAr');
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAs');
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAt');
Aber das ist anders:
crypt('Test123','$2y$09$AAAAAAAAAAAAAAAAAAAAAu');
warum sollte ich also nicht das 23. Zeichen verwenden, wenn es erfolgreich unterschiedliche Ergebnisse erzeugen können? Gibt es in PHP ein Glitchy-Verhalten, das vermieden werden sollte, indem man es nicht benutzt?
Zur Klarstellung auf, wie ich den 23. Charakter in dem Salz zählen:
crypt('Test123','$2y$08$ABCDEFGHIJKLMNOPQRSTUV');
// The salt is '$ABCDEFGHIJKLMNOPQRSTUV'
// Which will be treated as '$ABCDEFGHIJKLMNOPQRSTUO'
Es gibt eine gute Erklärung zu dieser Frage: http://security.stackexchange.com/questions/20862/php-crypt-trims-the-salt-as-it-would-be-too-long –
Vielen Dank für diese Antwort. Obwohl dies nur anspricht, was mit dem 23. Zeichen passiert, wird es nur aufgrund der Größe der Bits, die in der Funktion crypt() erlaubt sind, verkürzt. Meine Frage, auf eine andere Art und Weise zu fragen, ist "Soll ich das 23. Zeichen verwenden, auch wenn es in zwei Bits zerstückelt wird?" oder ein anderer Weg ist "Gibt es einen Fehler im PHP-Algorithmus, der falsche Hashes generiert, wenn das 23. Zeichen verwendet wird?" – Andrew