Podczas aktualizacji z Zend Server CE 5.1 do Zend Server CE 5.5, PHP również dostało upgrade z 5.3.5 do 5.3.8. Po tym przejściu funkcja logowania do aplikacji Zend, nad którą pracuję, nagle się zepsuła.PHP crypt() z sha256 w Zend Server CE 5.5 obcina dostarczoną sól
Próba debugowania, wygląda na to, że implementacja crypt()
nie odzwierciedla instrukcji PHP, lub źle ją zrozumiałem. Jeśli odważyłbym się zgadywać, to jest to drugie.
Używam soli o długości 16 znaków jako części większej soli przy użyciu SHA256, która jest używana jako przykład w podręczniku PHP.
$password = //string entered at login
$salt = '$5$rounds=250000$1234abcd5678defg$';
Po mam zakodowane wprowadzone hasło
$hash = crypt($password, $salt);
otrzymuję ciąg takiego jak wartości zwracanej:
$5$rounds=250000$1234abcd5678$tI.Oiz.YwWjIwT3K.SLU8SwUZ9J0/odBCkbE6t0igeB
Co zdumiewa mnie to, że sól 16 znaków, który jest częścią większej części (1234abcd5678defg powyżej), teraz jest obcinany do 12 znaków.
Czy jest to zgodne z przeznaczeniem? Wydaje się, że funkcja crypt()
zwraca teraz inne wyniki niż poprzednio - czy to zwykle między wersjami PHP? Nic w changelog nie sugeruje żadnych radykalnych zmian w algorytmach szyfrowania.
Wystąpił poważny błąd w wersji 5.3.7 dotyczącej funkcji krypt. Zostało to naprawione kilka dni później w 5.3.8. Może powinieneś poszukać postów na ten temat, czy to może być związane z twoim problemem? I sprawdź, czy nie masz PHP 5.3.7, ale 5.3.8. –
Zgodnie z phpinfo() i wyjściem na terminalu podczas działania php lub php-cli mówi, że to zend zoptymalizowany php 5.3.8. Data budowy to 24 miesiące, więc wydaje się, że jest poprawna. Ostatnie zatwierdzenie crypt_sha256.c, które wydaje się być zawarte w 5.3.7, polegało na tym, że naprawił problem z obcięciem soli. Ten sam problem, który miałem, ale powinien zostać naprawiony. Szukam odpowiedniego kanału dla potencjalnych błędów w PHP, zanim złożę prawidłowy raport o błędzie. – Patrick
Wierzę, że czytałem problem polegający na tym, że krypta zwróciła tylko sól, nie zaszyfrowane dane, ale tylko przy użyciu MD5. –