#perl #crypt
#perl #криптография
Вопрос:
При использовании функции Perl crypt шифруются только первые 8 символов. Есть ли способ заставить его использовать больше символов?
В качестве примера:
$crypted_password = crypt ("PassWord", "SALT");
и
$crypted_password = crypt ("PassWord123", "SALT");
возвращает точно такой же результат. $crypted_password имеет точно такое же значение.
Хотелось бы использовать crypt, потому что это быстрое и простое решение для некоторого необратимого шифрования, но это ограничение не делает его полезным для чего-либо серьезного.
Комментарии:
1. Стандартная
crypt(3)
функция DES в системах unix (для которой perlcrypt
является оболочкой) просматривает только первые 8 байтов, да. (Плюс соль состоит всего из двух символов). Если вы хотите повысить безопасность, вы должны использовать что-то другое.2. Чтобы дать больше источников комментарию от Шона: From
perldoc -f crypt
: «Создает строку дайджеста, точно такую же, как функция crypt(3) в библиотеке C … » .man 3 crypt
: «… Взяв младшие 7 бит каждого из первых восьми символов ключа … » . Таким образом, как он сказал: если вам нужно что-то более безопасное, не используйтеcrypt
.3. Пессимист во мне сказал бы, что лучше не включать «crypt» в современные дистрибутивы Perl, потому что люди будут читать ввод вручную для «crypt» и пропускать части о том, насколько это безопасно. Машина, которая выходит с завода только с одной панелью блокировки, вероятно, будет очень плохой идеей. Люди любят делать ошибки и печально известны тем, что пропускают биты или «пропускают» важные разделы документов, которые они должны были прочитать… Мои 2 цента.
Ответ №1:
Цитата из документации:
Традиционно результатом является строка из 13 байт: два первых байта соли, за которыми следуют 11 байт из набора
[./0-9A-Za-z]
, и только первые восемь байтов ОТКРЫТОГО ТЕКСТА имеют значение. Но альтернативные схемы хеширования (например, MD5), схемы безопасности более высокого уровня (например, C2) и реализации на платформах, отличных от Unix, могут создавать разные строки.
Таким образом, точное возвращаемое значение зависит от crypt
системы, но часто используется алгоритм, который просматривает только первые 8 байт пароля. Эти две вещи в сочетании делают его плохим выбором для переносимого шифрования паролей. Если вы используете систему с более надежной процедурой шифрования и не пытаетесь проверять эти пароли в несовместимых системах, все в порядке. Но похоже, что вы используете ОС со старой дрянной процедурой DES.
Таким образом, лучшим вариантом является использование модуля вне CPAN, который выполняет шифрование предсказуемым и более безопасным способом.
Некоторый поиск дает несколько перспективных вариантов (которые я не использовал и не могу рекомендовать один над другим; я просто искал многообещающие ключевые слова в metacpan):