хэш — потеря точности в PHP Crypt ()? Та же соль, разные пароли = тот же зашифрованный результат

Я использую Crypt () в PHP для шифрования паролей.
Скажем, соль «BG»,
Пароль: «gg456456gg»

Зашифрованный результат дает: «bgvQk9C2Pv27o»
Но если я использую пароль: «gg456456» — без двух последних символов, это дает тот же результат.

Благодаря этому пользователи могут войти без ввода 100% точного пароля.

Что происходит? Я имею в виду gg456456 и gg456456gg — это два разных пароля, почему зашифрованный результат один и тот же?

1

Решение

Php.net по функции crypt ()

Стандартный основанный на DES crypt () возвращает соль как первые два
символы вывода. Он также использует только первые восемь символов
str, поэтому более длинные строки начинаются с тех же восьми символов
будет генерировать тот же результат (когда используется та же соль).

Поэтому используйте другой метод шифрования.
Таких как blowfish или sha-512. Они будут принимать гораздо более длинные строки

Например. SHA-512:

$encpassword = crypt($password,"$6$".$salt);

Использовали метод выше (и ту же соль):

gg456456 -> $ 6 $ 631080661 $ L2o7HNKfYrqB4H19vYe7fRWWLenQj2EcWqriNG9rX6ki1QKO2YytkylrYmZ8mhIr6XE19Ms4RW2of5Z / dsYRA /

gg456456gg -> $ 6 $ 631080661 $ maGxQ2d7ZIPIdXDFN1sJJsIjTFEwD9dL / uljSXdKXeJU4E5miCzh1ZCao57sGDm9PrDhdPYPLGUvoy0HzTfqI.

Используйте хороший генератор случайных чисел для вашей соли и вуаля у вас есть хорошо зашифрованный пароль

3

Другие решения

Оригинальная функция crypt в системах Unix использует только первые 8 символов пароля. В конце концов мы решили, что это небезопасно, и переключились на более безопасные хеши паролей.

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

Увидеть http://php.net/manual/en/function.crypt.php для списка алгоритмов и соответствующих солей.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector