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

33.5. crypt – Функция для проверки паролей Unixcrypt – Function to check Unix passwords

Платформы: 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, рекомендуется использовать полный зашифрованный пароль в качестве соли при проверке пароля.

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

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