Функция PHP crypt на разных ОС

В моем приложении php я использую функцию php crypt (), где мое значение salt – это первые два символа из имени пользователя. Я заметил, что функция возвращает другой результат на windows и linux. Я также читал о w3cschools, что эта функция ведет себя по-разному в разных операционных системах. Можно настроить среду php для получения того же результата в обеих операционных системах? (Изменение режима шифрования не является вариантом.)

Solutions Collecting From Web of "Функция PHP crypt на разных ОС"

crypt () использует любую базовую хэш-функцию, используемую ОС, поэтому, если вы хотите получить надежные (постоянные) результаты, вы можете использовать одну из других хеш-функций, таких как md5 () или sha256 (), sha512 () .

Если вы хотите, чтобы специальная функция хеширования использовалась crypt (), вам нужно соответствующим образом указать хэш-параметр и проверить, поддерживается ли алгоритм на ОС хоста. Например (взято из страницы руководства PHP crypt () ):

if (CRYPT_STD_DES == 1) { echo 'Standard DES: ' . crypt('rasmuslerdorf', 'rl') . "\n"; } 

Но сама ОС зависит, поэтому я рекомендую вам использовать автономную хеш-функцию. Или хеш () .

Append:

С hash () вы должны сначала использовать hash_algos (), чтобы проверить, какой хэш является лучшим хешем, а затем использовать его как первый аргумент, например:

 <?php $algos = hash_algos(); if (in_array("sha256", $algos)) { $pass = hash ("sha256", "userpassword" . "salt"); } ?> 

Надеюсь это поможет.

Трудно сказать, не видя фактического кода, но этого не должно быть, если предположить, что указанный хэш поддерживается базовым кодом. До PHP 5.3 это был код ОС, но начиная с 5.3, хэш реализован в PHP.

Информация, предоставленная vanneto, немного вводит в заблуждение. crypt ожидает, что формат соли указывает на используемый алгоритм, например, если вы хотите blowfish, тогда вы бы предоставили соль:

 $2a$xx$yyyyyyyyyyyyyyyyyyyyyy 

Где xx указывает количество повторений и yyyy … является фактической солью в (22) base64 цифрами. Пример, представленный vanneto (2 буквы), должен использовать один раунд DES.