Генерация UUID для токенов API в Python - PullRequest
0 голосов
/ 29 октября 2018

В настоящее время я генерирую UUID в Python следующим образом:

import uuid
import secrets

uuid.UUID(bytes=secrets.token_bytes(16))

Безопасно ли это для использования в качестве токена API или токена доступа?

1 Ответ

0 голосов
/ 29 октября 2018

Две причины, по которым ваш нынешний подход, возможно, безопасен и обоснован:

  • вероятность генерации дублированного идентификатора с 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, который собирает информацию из таких источников, как драйверы устройств. То есть искаженная информация, относящаяся к генерирующей машине, но достаточно случайная и не идентифицируемая самим хост-компьютером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...