Мне нужно перенести хешированный пароль на новый сервер со старого.
Старый сервер имеет php 5.4.4, а функция crypt () для пароля возвращает строку из 102 символов.
Мой новый сервер имеет php 5.5.7, а функция crypt возвращает строку из 34 символов.
На обоих серверах крипта вызывается без параметров
crypt($password);
При входе пользователя (на старом сервере) я использую этот код:
crypt($_POST['password'], $hash_password) == $hash_password
Теперь, если я копирую хэш-пароли на новый хостинг и вызываю этот метод для проверки правильности пароля, пароль никогда не совпадает.
Как я могу сделать, чтобы сделать тот же тип хеширования на этом другом сервере?
это пример двух зашифрованных паролей:
на старом сервере:
$6$kcPF.fPojej2$YF5Ui0nP8t5Wc0JVVEI9.JD2l/ZyLQGL6T5RN3E5oz3GGiSZoTBsbocMggLkdlBhO6Xe7cGdepW7bo6mKFjYx1
на новом сервере
$1$Sz1cDmU0$Z0uoEwnXH1NokqPwwQJsp/
Старый сервер использует алгоритм SHA256 для создания хэшей, но новый сервер, похоже, не поддерживает его; другими словами, постоянная CRYPT_SHA512
является 0
,
В зависимости от того, как PHP установлен на новом сервере, вам может потребоваться проверить, libcrypt
достаточно недавно или свяжитесь с хостинговой компанией, которая предоставляет сервер.
Других решений пока нет …