Я использую функцию crypt для хранения пользовательских паролей в БД.
Исходный пароль зашифрован им самим, чтобы проверить его с паролем из БД (я знаю, что это не очень хорошая практика, но в данный момент ситуация такая).
Проблема в том, что:
crypt('qixin26428968123', 'qixin26428968123') === crypt('qixin26428968', 'qixin26428968')
Таким образом, кажется, что если, например, пароль 123456, и пользователь пытается войти в систему с 123456abcde, вход будет успешным, что означает, что пользователь всегда может войти в систему с произвольным выбором пароля, если ваш первый «n» биты верны.
Это известная проблема? Как это исправить, есть ли возможность указать для функции crypt?
Спасибо.
От руководство
Стандартный основанный на DES crypt () возвращает соль как первые два
символы вывода. Он также использует только первые восемь символов
str, поэтому более длинные строки начинаются с тех же восьми символов
будет генерировать тот же результат (когда используется та же соль).
CRYPT_SHA512 использует 16 символов
Других решений пока нет …