> **Источник:** https://python-all.ru/3.1/library/crypt.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 33.5. `crypt` – Функция для проверки паролей Unix

*Платформы:* Unix

Этот модуль реализует интерфейс к процедуре *crypt(3)*, которая является односторонней хэш-функцией, основанной на модифицированном алгоритме DES; за дополнительными сведениями обращайтесь к странице руководства Unix. Возможные применения включают разрешение скриптам Python принимать вводимые пользователем пароли или попытки взлома паролей Unix с помощью словаря.

Обратите внимание, что поведение этого модуля зависит от фактической реализации *crypt(3)* в работающей системе. Поэтому все расширения, доступные в текущей реализации, будут доступны и в этом модуле.

#### `crypt.crypt(word, salt)`

*word* обычно представляет собой пароль пользователя, введённый в командной строке или в графическом интерфейсе. *salt* обычно является случайной строкой из двух символов, которая используется для изменения алгоритма DES одним из 4096 способов. Символы в *salt* должны принадлежать набору `[./a-zA-Z0-9]`. Возвращает хэшированный пароль в виде строки, которая будет состоять из символов того же алфавита, что и соль (первые два символа представляют саму соль).

Поскольку некоторые расширения *crypt(3)* допускают различные значения с разными размерами *salt*, рекомендуется использовать полный зашифрованный пароль в качестве соли при проверке пароля.

Простой пример, иллюстрирующий типичное использование:

```python
import crypt, getpass, pwd

def login():
    username = input('Python login:')
    cryptedpasswd = pwd.getpwnam(username)[1]
    if cryptedpasswd:
        if cryptedpasswd == 'x' or cryptedpasswd == '*':
            raise "Sorry, currently no support for shadow passwords"
        cleartext = getpass.getpass()
        return crypt.crypt(cleartext, cryptedpasswd) == cryptedpasswd
    else:
        return 1
```
