Документация Python неофициальный перевод

crypt.md

37 строк · 3.4 КБ · обычная страница · сырой текст · скачать

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