Как заставить Perl crypt шифровать более 8 символов?

При использовании Perl-функции crypt шифруются только первые 8 символов. Есть ли способ заставить его использовать больше символов?

В качестве примера:

$crypted_password = crypt ("PassWord", "SALT");

а также

$crypted_password = crypt ("PassWord123", "SALT");

возвращает точно такой же результат. $crypted_password имеет точно такое же значение.

Хотелось бы использовать crypt, потому что это быстрое и простое решение для необратимого шифрования, но это ограничение не делает его полезным для чего-то серьезного.


person gpwr    schedule 19.04.2019    source источник
comment
Стандартная функция DES crypt(3) в системах unix (для которой perl crypt является оболочкой) просматривает только первые 8 байтов, да. (Плюс соль всего два символа). Если вы хотите повысить безопасность, вы должны использовать что-то еще.   -  person Shawn    schedule 19.04.2019
comment
Чтобы дать больше источников для комментария Шона: От perldoc -f crypt: Создает строку дайджеста точно так же, как функция crypt(3) в библиотеке C.... man 3 crypt: ...взяв младшие 7 бит каждого из первых восьми символов ключа.... Таким образом, как он сказал: если вам нужно что-то более безопасное, не используйте crypt.   -  person Steffen Ullrich    schedule 19.04.2019
comment
Пессимист во мне сказал бы, что лучше не включать «крипт» в современные дистрибутивы Perl, потому что люди будут читать описание «крипта» вручную и пропускать части о том, насколько он безопасен. Автомобиль, который выходит с завода только с одной тормозной колодкой, вероятно, будет очень плохой идеей. Люди любят делать ошибки и печально известны тем, что пропускают фрагменты или «пропускают» важные разделы документов, которые они должны были прочитать... Мои 2 цента.   -  person gpwr    schedule 19.04.2019


Ответы (1)


Цитата из документации:

Традиционно результатом является строка из 13 байтов: два первых байта соли, за которыми следуют 11 байтов из набора [./0-9A-Za-z], и только первые восемь байтов PLAINTEXT имеют значение. Но альтернативные схемы хэширования (например, MD5), схемы безопасности более высокого уровня (например, C2) и реализации на платформах, отличных от Unix, могут создавать разные строки.

Таким образом, точное возвращаемое значение crypt зависит от системы, но часто используется алгоритм, который рассматривает только первые 8 байтов пароля. Сочетание этих двух вещей делает его плохим выбором для портативного шифрования паролей. Если вы используете систему с более надежной процедурой шифрования и не пытаетесь проверить эти пароли в несовместимых системах, все в порядке. Но похоже, что вы используете ОС со старой дрянной рутиной DES.

Поэтому лучшим вариантом является использование модуля вне CPAN, который выполняет шифрование предсказуемым и более безопасным способом.

Некоторый поиск дает несколько многообещающих вариантов (которые я не использовал и не могу рекомендовать друг другу; я просто искал многообещающие ключевые слова на метакпане):

person Shawn    schedule 19.04.2019