Генерация случайных идентификаторов в Python

UUID означает универсальный уникальный идентификатор — это библиотека Python, которая помогает генерировать случайные объекты из 128 бит в качестве идентификаторов. Он обеспечивает уникальность, поскольку генерирует идентификаторы на основе времени, аппаратного обеспечения компьютера (MAC и т. д.). В этом посте мы увидим, как использовать модуль Python UUID для создания универсальных уникальных идентификаторов.

Что такое UUID?

UUID — это 128-битный номер или идентификатор для уникальной идентификации конфиденциальной или нечувствительной информации, такой как файлы, пользователи, ресурсы или информация в компьютерных системах.

  1. UUID может обеспечить уникальность идентификаторов во всем пространстве и во времени. Когда мы говорим о пространстве и времени, это означает, что UUID генерируется в соответствии со стандартом. Идентификатор не дублирует уже созданный или тот, что будет создан для идентификации чего-то другого.
  2. Поэтому UUID выгоден там, где требуется уникальное значение.

Модуль UUID в Python реализован в соответствии с RFC 4122. RFC 4122 является стандартом и авторским правом(C) The Internet Society. Спецификация RFC 4122 включает в себя все детали и алгоритмы для создания уникальных идентификаторов всех версий. Документ RFC 4122 определяет три алгоритма для создания UUID.

Следовательно, используя модуль Python UUID, вы можете генерировать UUID версий 1, 3, 4 и 5. UUID, сгенерированный с помощью модуля uuid, неизменяем.

Модуль Python UUID предоставляет следующие версии UUID.

  1. UUID1 генерирует UUID, используя MAC-адрес хоста, серийный (порядковый) номер и текущее время. Версия uuid1 использует MAC-адреса IEEE 802.
  2. UUID3 и UUID5 используют криптографическое хеширование и предоставленные приложением текстовые строки для генерации UUID. UUID 3 использует хеширование MD5, а UUID 5 использует хеширование SHA-1.
  3. UUID4 использует генераторы псевдослучайных чисел для генерации UUID. Это более безопасно.

Представления uuid1()

  1. bytes: возвращает идентификатор в виде 16-байтовой строки.
  2. int: возвращает идентификатор в виде 128-битного целого числа.
  3. hex: возвращает случайный идентификатор в виде 32-символьной шестнадцатеричной строки.

Компоненты uuid1()

  1. version: это номер версии UUID.
  2. variant: это вариант, определяющий внутреннюю компоновку UUID.

Поля uuid1()

  1. time_low: первые 32 бита идентификатора.
  2. time_mid: следующие 16 бит идентификатора.
  3. time_hi_version: следующие 16 бит идентификатора.
  4. clock_seq_hi_variant: следующие 8 бит идентификатора.
  5. clock_seq_low: следующие 8 бит идентификатора.
  6. node: последние 48 бит идентификатора.
  7. time: поле компонента времени идентификатора.
  8. clock_seq : 14-битный порядковый номер.

Давайте извлечем и распечатаем указанную выше информацию для uuid.uuid1().

Выход:

Генерация случайных идентификаторов, используя UUID.uuid1()

Модуль Python UUID предоставляет метод uuid1(), который генерирует случайный идентификатор, используя MAC-адрес и компонент времени.

Синтаксис

Параметры

  1. node и clock_seq являются необязательными аргументами.
  2. node — это аппаратный адрес, представляющий собой 48-битное положительное целое число. Если узел не указан, то функция uuid.getnode() используется для получения универсально администрируемых MAC-адресов текущего хоста.
  3. Если указан clock_seq, он используется как порядковый номер. В противном случае выбирается случайный 14-битный порядковый номер.

Пример:

Выход:

Вы можете видеть, что мы сгенерировали случайный идентификатор. Теперь мы можем использовать этот идентификатор в любом месте нашего приложения или использовать его в криптографии для дальнейшего усиления шифрования.

Создание уникального идентификатора для хоста, используя node и clock sequence

Мы можем применить последовательность узлов и часов для явного функционирования.

Выход:

Метод uuid.getnode() используется для получения MAC-адреса сетевого интерфейса. Если машина имеет более одной сети с универсальным администрированием, то MAC-адреса возвращаются вместо локально администрируемых MAC-адресов.

Администрируемые MAC-адреса гарантированно будут глобально уникальными, если функция getnode() не сможет получить MAC-адрес; она возвращает случайное 48-битное число с многоадресным битом, как рекомендовано в RFC 4122.

Недостаток uuid1()

Основным недостатком метода uuid1() является то, что этот способ включает использование MAC-адреса компьютера и, следовательно, может поставить под угрозу конфиденциальность, даже если он обеспечивает уникальность. Таким образом, метод uuid1() бесполезен в приложениях, чувствительных к данным.

Генерация случайных идентификаторов с помощью UUID.uuid4()

Функция Python uuid.uuid4() возвращает случайное число. И не идет на компромисс с конфиденциальностью.

Выход:

На выходе UUID состоит из пяти компонентов, и каждый компонент имеет фиксированную длину. Символ дефиса отделяет каждый компонент. UUID представлен в формате «8-4-4-4-12». Первый компонент имеет 8 бит, второй — 4, третий — 4, четвертый — 4, а пятый — 12.

Формальное определение строкового представления UUID выглядит следующим образом.

UUID = time_low «-» time_mid «-» time_high_and_version » «clock_seq_and_reserved_And_clock_seq_low» — «Узел.

uuid4() создает случайный UUID. Вероятность столкновения мала. Когда UUID необходимо создать на отдельных машинах или вам нужно сгенерировать безопасный UUID, используйте UUID4().

Применение uuid3() в генерации

Функция uuid.uuid3 (namespace, name) генерирует UUID на основе хэша MD5 идентификатора пространства имен (который является UUID) и строки.

Модуль UUID определяет указанные ниже идентификаторы пространств имен для использования с uuid3() или uuid5().

  1. UUID.NAMESPACE_DNS: это означает полное доменное имя. Например, google.com.
  2. UUID.NAMESPACE_URL: когда это пространство имен определено, это означает, что это URL-адрес.
  3. UUID.NAMESPACE_OID: когда это пространство имен определено, строка имени представляет собой OID ISO.
  4. UUID.NAMESPACE_X500: Когда оно определено, строка имени представляет собой DN X.500 в формате DER или текстовом формате вывода.

Давайте сгенерируем случайные идентификаторы, используя uuid3().

Выход:

UUID, сгенерированные в разное время с использованием одного и того же пространства имен и одного имени, равны. Уникальные идентификаторы, сгенерированные из двух разных имен в одном и том же пространстве имен, различаются. UUID, сгенерированные из одного и того же имени в двух разных пространствах имен, отличаются.

Генерация случайных идентификаторов с помощью uuid5()

Мы можем применить ту же формулу из приведенной выше функции, но разница в том, что на этот раз мы используем функцию uuid5().

Выход:

Когда и зачем использовать UUID

В настоящее время одним из наиболее часто используемых приложений является криптография и кибербезопасность. Если вы идете в банк, то когда вы вносите деньги, создается транзакция, а затем генерируется идентификатор транзакции. Теперь мы можем использовать здесь для создания идентификатора транзакции. Мы можем использовать UUID для создания идентификатора транзакции. Так что в финансовых приложениях это может быть полезно.

UUID также полезны для создания уникального идентификатора сеанса, чтобы помочь управлению состоянием. Если вы работаете с Laravel или другим PHP Framework, то вы видели, что мы создаем идентификатор пользователя, используя технику автоинкремента. В котором каждый раз, когда создается пользователь, мы будем увеличивать его идентификатор на единицу. В этом случае мы можем легко угадать идентификатор пользователя.

Когда вы используете UUID, трудно угадать идентификатор, потому что UUID не создается в каком-либо серийном формате, поэтому трудно угадать, это серийный номер или последовательность. Таким образом, это может быть полезно и в веб-разработке. UUID имеет значительное преимущество, поскольку UUID не зависит от окружающей среды. т. е. UUID, сгенерированный на любой машине с помощью любого приложения, является универсально уникальным.

Заключение

Как генерировать случайные идентификаторы с UUID в Python

В этом уроке, во-первых, мы поняли, что такое модуль uuid и каковы его функции, которые могут помочь нам создавать случайные идентификаторы для различных сценариев. Затем мы увидели, почему и когда мы можем использовать uuid в реальных проектах.

Оцените статью

Автор статей и разработчик, делюсь знаниями.

Программирование на Python