crypt.md
1> **Источник:** https://python-all.ru/2.7/library/crypt.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 36.5. [`crypt`](https://python-all.ru/2.7/library/crypt.html#module-crypt)– Функция для проверки паролей Unix89Этот модуль реализует интерфейс к процедуре *crypt(3)*, которая является односторонней хэш-функцией, основанной на модифицированном алгоритме DES; за дополнительными сведениями обращайтесь к странице руководства Unix. Возможные применения включают разрешение скриптам Python принимать вводимые пользователем пароли или попытки взлома паролей Unix с помощью словаря.1011Обратите внимание, что поведение этого модуля зависит от фактической реализации *crypt(3)* в работающей системе. Поэтому все расширения, доступные в текущей реализации, будут доступны и в этом модуле.1213#### `crypt.crypt(word, salt)`1415*Пароль* обычно представляет собой пароль пользователя, введённый в приглашении или в графическом интерфейсе. *Соль* – это обычно случайная строка из двух символов, которая используется для возмущения алгоритма DES одним из 4096 способов. Символы в *соли* должны принадлежать множеству `[./a-zA-Z0-9]`. Возвращает хешированный пароль в виде строки, состоящей из символов того же алфавита, что и соль (первые два символа представляют саму соль).1617Поскольку некоторые расширения *crypt(3)* допускают различные значения с разными размерами *salt*, рекомендуется использовать полный зашифрованный пароль в качестве соли при проверке пароля.1819Простой пример, иллюстрирующий типичное использование:2021```python22import crypt, getpass, pwd2324def login():25 username = raw_input('Python login:')26 cryptedpasswd = pwd.getpwnam(username)[1]27 if cryptedpasswd:28 if cryptedpasswd == 'x' or cryptedpasswd == '*':29 raise NotImplementedError(30 "Sorry, currently no support for shadow passwords")31 cleartext = getpass.getpass()32 return crypt.crypt(cleartext, cryptedpasswd) == cryptedpasswd33 else:34 return 135```36