Я использую Crypt () в PHP для шифрования паролей.
Скажем, соль «BG»,
Пароль: «gg456456gg»
Зашифрованный результат дает: «bgvQk9C2Pv27o»
Но если я использую пароль: «gg456456» — без двух последних символов, это дает тот же результат.
Благодаря этому пользователи могут войти без ввода 100% точного пароля.
Что происходит? Я имею в виду gg456456 и gg456456gg — это два разных пароля, почему зашифрованный результат один и тот же?
Стандартный основанный на DES crypt () возвращает соль как первые два
символы вывода. Он также использует только первые восемь символов
str, поэтому более длинные строки начинаются с тех же восьми символов
будет генерировать тот же результат (когда используется та же соль).
Поэтому используйте другой метод шифрования.
Таких как blowfish или sha-512. Они будут принимать гораздо более длинные строки
Например. SHA-512:
$encpassword = crypt($password,"$6$".$salt);
Использовали метод выше (и ту же соль):
gg456456 -> $ 6 $ 631080661 $ L2o7HNKfYrqB4H19vYe7fRWWLenQj2EcWqriNG9rX6ki1QKO2YytkylrYmZ8mhIr6XE19Ms4RW2of5Z / dsYRA /
gg456456gg -> $ 6 $ 631080661 $ maGxQ2d7ZIPIdXDFN1sJJsIjTFEwD9dL / uljSXdKXeJU4E5miCzh1ZCao57sGDm9PrDhdPYPLGUvoy0HzTfqI.
Используйте хороший генератор случайных чисел для вашей соли и вуаля у вас есть хорошо зашифрованный пароль
Оригинальная функция crypt в системах Unix использует только первые 8 символов пароля. В конце концов мы решили, что это небезопасно, и переключились на более безопасные хеши паролей.
Функция PHP crypt выбирает используемый алгоритм на основе соли, которую вы предоставляете, и двухсимвольной буквенно-цифровой соли, как вы использовали, запускает этот оригинальный алгоритм шифрования.
Увидеть http://php.net/manual/en/function.crypt.php для списка алгоритмов и соответствующих солей.