secrets — Безопасные случайные числа

Модуль secrets следует применять вместо random при работе с паролями, токенами аутентификации и криптографией.

import secrets
import string

# Генерация токенов (API ключи)
api_key = secrets.token_hex(32)
url_token = secrets.token_urlsafe(32)

# Безопасный выбор элементов (например, для пароля)
alphabet = string.ascii_letters + string.digits
password = ''.join(secrets.choice(alphabet) for i in range(12))

# Безопасное сравнение строк (защита от timing-атак)
is_valid = secrets.compare_digest("token_A", "token_B")

Полный справочник API (API Reference)

Выбор и числа

Функция Описание
secrets.choice(seq) Выбирает криптографически безопасный случайный элемент из последовательности.
secrets.randbelow(n) Случайное целое число в диапазоне от 0 до n-1.
secrets.randbits(k) Возвращает целое число, состоящее из k случайных бит.

Токены и пароли

Функция Описание
secrets.token_bytes([nbytes]) Генерирует и возвращает сырые рандомные байты.
secrets.token_hex([nbytes]) Токен в формате безопасной 16-ричной строке (длина строки будет в два раза больше nbytes).
secrets.token_urlsafe([nbytes]) Генерирует токен (в формате Base64), где нет символов, ломающих URL-адрес (+, /, =).

Безопасность

Функция Описание
secrets.compare_digest(a, b) Сравнивает строки полностью защищенным от атак по времени (Timing Attack) способом.