Как заставить Perl crypt шифровать более 8 символов? - PullRequest
2 голосов
/ 19 апреля 2019

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

Как пример:

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

и

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

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

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

1 Ответ

1 голос
/ 19 апреля 2019

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

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

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

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

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

...