Krypta do mieszania hasłem. Blowfish produkuje dziwne dane wyjściowe

Mam trochę kłopotów ze zrozumieniem funkcji kryptograficznej php. Moja wersja PHP to 5.4.7.

Chcę używać krypt do przechowywania solonych haseł w bazie danych, ponieważ, o ile mi powiedziano, programiści używający md5 do haszowania haseł mają być tyczeni i wypaleni na miejscu.

Chciałem użyć Blowfish ALG aby wygenerować hash. Teraz, zgodnie z dokumentacją php, crypt używa blowfish, jeśli nazywasz to „$ 2y $” + koszt (na przykład: „08”) + „$” + 22 znaki soli (./0-9A-Za-z) . Jednak wyjście z tej odrobiny kodu testu jest mylące mnie:

echo "<pre>";
if (CRYPT_BLOWFISH == 1) {
    echo 'Blowfish SaltLen = 18:     ' . crypt('string that should be hashed', '$2y$08$123456789012345678') . "\n";
    echo 'Blowfish SaltLen = 19:     ' . crypt('string that should be hashed', '$2y$08$1234567890123456789') . "\n";
    echo 'Blowfish SaltLen = 20:     ' . crypt('string that should be hashed', '$2y$08$12345678901234567890') . "\n";
    echo 'Blowfish SaltLen = 21:     ' . crypt('string that should be hashed', '$2y$08$123456789012345678901') . "\n";
    echo 'Blowfish SaltLen = 22:     ' . crypt('string that should be hashed', '$2y$08$1234567890123456789012') . "\n";
}
echo "</pre>";

Wydajność:

Blowfish SaltLen = 18:     $2y$08$123456789012345678$$.Gq4WBozZb6XYmOJ88OC8gThSTUx8pRO
Blowfish SaltLen = 19:     $2y$08$1234567890123456789$.u8Qm7Q9KVtvo2zwpKkN5ntAxu71k2pO
Blowfish SaltLen = 20:     $2y$08$12345678901234567890$.iIlIFEGaqDj6XbnKkK1F14HmMGLV.mu
Blowfish SaltLen = 21:     $2y$08$123456789012345678901.iIlIFEGaqDj6XbnKkK1F14HmMGLV.mu
Blowfish SaltLen = 22:     $2y$08$123456789012345678901uSFz9yPi/jA6e9aMcUkm7y.TJYhcCoSu

Ukryta krypta wypełnia sól $, jeśli nie jest wystarczająco długa. Sól zmienia się, podobnie jak hash. Tak więc dane wyjściowe w wierszu 1 i 2 są zgodne z oczekiwaniami.

To, co mnie zastanawia, to trzy ostatnie skróty: W końcu kropka oddziela haszy od soli (?), Ale jeśli rzeczywiście dasz kryptę 22 postacie, których potrzebuje jako sól, kropka znika. Również ostatni znak z soli nie pojawia się na wyjściu, ale zmienia hash porównaniu do soli 21 znaków.

Szczególnie kłopotliwa jest linia 3 i 4 na wyjściu! Sól jest oczywiście inna, ale skróty są dokładnie takie same. Po prostu nie widzę w tym żadnej konsekwencji i byłbym bardzo wdzięczny za pomoc.

questionAnswers(1)

yourAnswerToTheQuestion