Две причины, по которым ваш нынешний подход, возможно, безопасен и обоснован:
- вероятность генерации дублированного идентификатора с 128 битами энтропии составляет фактически ноль . (Это стандартный размер UUID, который вы используете.)
secrets
разработан специально с целью генерации криптографически сильных случайных чисел; token_bytes()
на самом деле является просто вызовом os.urandom()
, который, в свою очередь, возвращает случайные байты из специфического для ОС источника случайности. *
Предложение - uuid.uui4()
делает в основном то же самое без дополнительных затрат на вызов посреднических функций:
# https://github.com/python/cpython/blob/3.5/Lib/uuid.py
def uuid4():
"""Generate a random UUID."""
return UUID(bytes=os.urandom(16), version=4)
Еще одно предложение - вы можете использовать .hex
результирующего объекта UUID, чтобы получить красивую строку без переноса.
>>> uuid.uuid4().hex
'22c482ef3cd84c26bb49c0287828428f'
* В Unix это /dev/urandom
, который собирает информацию из таких источников, как драйверы устройств. То есть искаженная информация, относящаяся к генерирующей машине, но достаточно случайная и не идентифицируемая самим хост-компьютером.