Nach der crypt() documentation muss das Salz 22 Basis 64 Ziffern aus dem Alphabet "./0-9A-Za-z" sein.Blowfish Salz Länge für die Crypt() Funktion?
Dies ist der Code Beispiel geben sie:
crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$');
Der erste Teil verwirrend, dass Salz 25 Zeichen hat, nicht 22.
Frage 1: das heißt noch lange das Salz soll zu sein länger als 22 Zeichen?
Dann habe ich die Funktion selbst getestet und etwas bemerkt. Wenn ich ein 20 Zeichen Salz verwenden, bekomme ich diesen
// using 20 char salt: 00000000001111111111
crypt('rasmuslerdorf', '$2a$07$00000000001111111111$');
// $2a$07$00000000001111111111$.6Th1f3O1SYpWaEUfdz7ieidkQOkGKh2
Also, wenn ich ein 20 Zeichen Salz verwendet wird, ist das gesamte Salz in der Ausgabe. Das ist praktisch, weil ich das Salz dann nicht an einem anderen Ort aufbewahren muss. (Ich möchte zufällige Salze verwenden). Ich wäre in der Lage, das Salz wieder aus dem generierten Hash zu lesen.
Wenn ich jedoch ein 22-stelliges Salz verwende, wie es in der Dokumentation steht, oder ein längeres, wird das Salz am Ende abgeschnitten.
// using 22 char salt: 0000000000111111111122
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// 22nd character of the salt is gone
// using 25 char salt: 0000000000111111111122222
crypt('rasmuslerdorf', '$2a$07$0000000000111111111122222$');
// $2a$07$000000000011111111112uRTfyYkWmPPMWDRM/cUAlulrBkhVGlui
// Same hash was generated as before, 21 chars of the salt are in the hash
Frage # 2: Also, was genau ist die richtige Länge eines Salzes? 20? 22? Länger?
Frage # 3: Ist es auch eine gute Idee, das Salz aus dem Hash zu lesen, wenn es Zeit ist, Passwörter zu überprüfen? Anstatt das Salz in einem separaten Feld zu speichern und es von dort zu lesen. (Dies scheint redundant zu sein, da das Salz in dem Hash enthalten zu sein scheint).
CRYPT_SALT_LENGTH gibt 60 auf meiner Win7-Maschine, 123 auf Ubuntu zurück. –
@Burak Guzel: Laut Handbuch ** PHP setzt eine Konstante mit dem Namen 'CRYPT_SALT_LENGTH', die das längste gültige Salz angibt, das von den verfügbaren Hashes ** erlaubt ist. –
@Burak Guzel: CRYPT_SALT_LENGTH gibt 60 bis PHP 5.3.1 zurück, aber 123 von 5.3.2. Dies liegt daran, dass SHA-256 (64 Zeichen langes Salz) und SHA-512 (123 Zeichen langes Salz) mit PHP 5.3.2 eingeführt wurden. – Sliq