все Python 3до 3.13Linux · macOSУдалено из стандартной библиотекипонятие
crypt
удалённые модули
Обёртка над системной функцией crypt(3) для хеширования паролей. Только Unix. Удалён в Python 3.13 — используйте hashlib.scrypt или passlib.
Синтаксис
import crypt # до 3.13
crypt.crypt(пароль, соль) звал системную crypt(3) и давал строку вида '$6$соль$хеш', как в /etc/shadow; crypt.mksalt() готовил соль. Убран по PEP 594: набор алгоритмов зависел от системы, на macOS был только слабый DES, на Windows модуля не было. Как переписать: соль берите из os.urandom(16) или secrets.token_bytes(16), хеш — hashlib.scrypt(пароль, salt=соль, n=2**14, r=8, p=1) или hashlib.pbkdf2_hmac('sha256', ...), храните соль рядом с хешем, а при входе пересчитайте и сравните через hmac.compare_digest(). Готовые форматы хешей дают passlib, bcrypt и argon2-cffi. Если нужно проверять именно хеши crypt(3) — пакеты legacycrypt или standard-crypt на PyPI.
Примеры
# Python 3.13+
try:
import crypt
except ModuleNotFoundError as e:
print(type(e).__name__) # → ModuleNotFoundError
# Python 3.13+
import hashlib, hmac, os
salt = os.urandom(16)
stored = hashlib.scrypt(b'secret', salt=salt, n=2**14, r=8, p=1)
attempt = hashlib.scrypt(b'secret', salt=salt, n=2**14, r=8, p=1)
print(len(stored), hmac.compare_digest(stored, attempt)) # → 64 True
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности