# DRF Rack # Библиотека классов расширений для Django REST Framework # # Автор: Николай В. Анохин # Все права защищены. Лицензия: MIT """ Работа с криптографией """ import secrets class Crypto: """ Реализует методы работы со случайными и криптографическими значениями """ DEFAULT_TOKEN_LENGTH = 32 """ Длина токена по умолчанию """ DEFAULT_PIN_CODE_LENGTH = 4 """ Длина PIN-кода по умолчанию """ DEFAULT_PIN_CODE_ALPHABET = "0123456789" """ Алфавит PIN-кода по умолчанию """ @classmethod def gen_token(cls, length: int = DEFAULT_TOKEN_LENGTH) -> str: """ Генерирует случайный токен :param length: Длина токена :return: Сгенерированный токен """ bytes_needed = (length + 1) // 2 token = secrets.token_hex(bytes_needed) return token[:length] @classmethod def gen_pin_code(cls, length: int = DEFAULT_PIN_CODE_LENGTH, alphabet: str = DEFAULT_PIN_CODE_ALPHABET): """ Генерирует случайный PIN-код :param length: Длина PIN-кода :param alphabet: Алфавит PIN-кода :return: Сгенерированный PIN-код """ return "".join(secrets.choice(alphabet) for _ in range(length))