Функция PHP crypt на разных ОС - PullRequest
3 голосов
/ 15 декабря 2010

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

Ответы [ 2 ]

3 голосов
/ 15 декабря 2010

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

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

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

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

Append:

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

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

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

0 голосов
/ 15 декабря 2010

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

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

$2a$xx$yyyyyyyyyyyyyyyyyyyyyy

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...