Я думаю, что я теряю свои шарики здесь ... У меня есть проблема на моем веб-сайте, где случайно перестает принимать логины.Теперь я могу отследить, что crypt () ведет себя очень странно.
В моей базе данных есть зашифрованная версия пароля пользователя - скажем, Og12345678.
Когда пользователь входит в систему, он вводит свой пароль, я считываю соль из БД, а затем шифрую то, что он ввел, и сравниваю - обычно это работает очень хорошо.
Итак, я делаю crypt ($ enterPassword,$ saltFromDb) - в этом случае соль будет Og, конечно.Обычно для данного пользователя пароль crypt работает нормально.
Когда что-то идет не так (и когда они делают это, это постоянное изменение, пока я не перезагружаю Apache), я обнаружил, что crypt начинает возвращать РАЗЛИЧНЫЙ ответ для того же ввода с тем же вводомсоль.
Однако, это не противоречит, то есть, если система работает неправильно, крипта возвращает неправильный ответ, но всегда возвращает тот же неправильный ответ.Повторные обновления страницы показывают тот же результат.Та же самая соль также присутствует в недавно неверном результате склепа, так что не то, чтобы соль пропала где-то.
Если я тогда перезапущу Apache и перезапущу скрипт без каких-либо изменений,результаты из crypt возвращаются к тому, как они должны быть.
Я ценю, что это не последний PHP (5.2.8), но оценил бы любые взгляды на это, включая то, является ли это известной ошибкой, исправленной в более поздней версии (обновлениеPHP не является удачной задачей с большим количеством сайтов, некоторые из которых все еще используют прискорбные причуды, которые все должны быть повторно протестированы с каждым обновлением) - если это известная исправленная ошибка, тогда, очевидно, я получу все это обновлено как можно скорее, кроме этогоВероятно, будет проще произвести аутсорсинг крипты извне, поскольку я использую его только в одном общем месте для своего сайта.
Любой вклад приветствуется.
Мэтт Педдлсден
--- Обновление: 11 марта 2011 г.
Исправление в комментариях, ранее высказанных об операционной системе ... - Операционная система Windows Server 2008 SP1 64 бит.Извинения я должен был проверить дважды, а не предполагать, что я могу вспомнитьМашина - Dell 2950 8 Гбайт Ram, процессоры Xeon.
Я начинаю думать в том же духе, что Кртек предлагает - когда система выйдет из строя, если я сгенерирую новый crypt () (т.е. очень простой пример, гдея установил переменную в строку, зашифровал ее и затем сравнил с криптой) - все прекрасно работает.Когда я перезагружаю сервер, все снова возвращается к предыдущим вычислениям.Поэтому я определенно склоняюсь к чему-то, что меняет алгоритм, используемый для вычисления результата crypt () ... какие-либо мысли о том, что могло бы вызвать это?Я распечатал значения CRYPT_STD_DES и т. Д., И они не меняются при перезапуске.
Кто-нибудь получил какие-либо подсказки о том, что могло бы вызвать это?
Что бы это ни казалось дважды за один день вчера, самое странное.
Спасибо за ответы, полученные таким образомдалеко.
--- Обновление: 16 марта 2011 г.
Просто хотел предоставить еще одно обновление.
Это все еще происходит, все еще не понимаяо том, почему.
В случае, если кто-то столкнется с этим в будущем, я думаю, что мое решение будет состоять в том, чтобы сделать какой-нибудь неприятный хак, чтобы вытолкнуть все исполнения crypt () во внешнее приложение C # и остановитьприходится полагаться на PHP, чтобы сделать их.Что-то где-то идет не так, и на данный момент единственное решение, которое я вижу, это полностью удалить его из уравнения.
Конечно, если это произойдет все еще , будет интересно узнать и это.!:)
Спасибо всем.