PHP crypt () возвращает неправильный ответ

Я думаю, что теряю свои шарики здесь ... У меня проблема на моем веб-сайте, где он случайно перестает принимать входы. Теперь я смог отследить это до очень странного поведения crypt ().

В моей базе данных есть зашифрованная версия пароля пользователя - скажем, Og12345678.

Когда пользователь входит в систему, они вводят свой пароль, я считываю соль из базы данных, а затем шифрую то, что они ввели, и сравниваю - обычно это работает очень хорошо.

Так что я делаю crypt ($ enterPassword, $ saltFromDb) - в данном случае, соль, конечно, будет Ог. Обычно для данного пользователя пароль crypt работает нормально.

Когда что-то пойдет не так (и когда они это сделают, это будет постоянное изменение, пока я не перезапущу Apache), я обнаружил, что crypt начинает возвращать ДРУГОЙ ответ для того же ввода с той же солью.

Тем не менее, это согласованно, т.е. если система пошла не так, crypt возвращает неправильный ответ, но всегда возвращает тот же неправильный ответ. Повторные обновления страницы показывают тот же результат. Та же самая соль также присутствует и в новом некорректном результате шифрования, так что дело не в том, что соль где-то пропала.

Если я затем перезапущу Apache и повторно запустил скрипт вообще без каких-либо изменений, результаты из crypt затем возвращаются к тому, каким они должны быть.

Я ценю, что это не последняя версия PHP (5.2. - Операционная система - Windows Server 2008 SP1 64 бит. Извинения, мне следовало перепроверить, а не думать, что я помню! Машина представляет собой ОЗУ Dell 2950 8 ГБ, процессоры Xeon.

Я начинаю думать в том же духе, что предлагает Кртек - когда система пошатнулась, если я сгенерирую new crypt () (т.е. очень простой пример, где я установил переменную в строку, зашифруйте ее, а затем сравните с криптой) - все отлично работает. Когда я перезапускаю сервер, снова все возвращается к предыдущим расчетам. Так что я определенно склоняюсь к тому, что изменяет алгоритм, используемый для вычисления результата crypt () ... какие-либо мысли о том, что может вызвать это? Я распечатал значения CRYPT_STD_DES и т. Д., И они не меняются между перезапусками.

Кто-нибудь знает, что могло вызвать это?

Что бы это ни случилось вчера дважды за один день, очень странно.

Спасибо за ответы.

--- Обновление : 16 марта 2011

Просто хотел предоставить еще одно обновление.

Это все еще происходит, до сих пор нет понимания, почему.

Если кто-то столкнется с этим в будущем, я думаю, что мое решение будет продвигаться вперед. чтобы сделать какой-нибудь неприятный хакер, чтобы передать все выполнения crypt () во внешнее приложение C # и перестать полагаться на PHP для их выполнения. Что-то где-то идет не так, и на данный момент единственное решение, которое я вижу, - это полностью удалить это из уравнения.

Конечно, если это по-прежнему произойдет, это тоже будет интересно узнать! :)

Всем спасибо.

9
задан Matt Peddlesden 16 March 2011 в 10:38
поделиться