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

Модуль Python UUID реализован на основе RFC 4122. Спецификация RFC 4122 содержит подробные сведения и алгоритмы для создания уникальных идентификаторов всех версий.

Преимущества UUID:

  • Его можно использовать как инструмент для создания уникального случайного идентификатора.
  • Его можно использовать в приложениях криптографии и хеширования.
  • Его можно использовать для уникальной идентификации документов, пользователей и ресурсов компьютера.

Python UUID module поддерживает следующие версии UUID.

  • UUID1 — генерирует UUID из идентификатора хоста, порядкового номера и текущего времени. Если узел не указан, для получения аппаратного адреса используется getnode(). Если указано clock_seq, оно используется как порядковый номер; в противном случае выбирается случайный 14-битный порядковый номер.
  • UUID3 и UUID 5 используют криптографическое хеширование и предоставленные приложением текстовые строки для создания UUID. UUID 3 использует хеширование MD5, а UUID 5 использует хеширование SHA-1.
  • UUID4 использует генераторы псевдослучайных чисел для генерации UUID. Это более безопасно.

Давайте посмотрим на это сейчас на некоторых примерах.

Использование UUID1()

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

Синтаксис

uuid.uuid1(node=None, clock_seq=None)

Параметры

  1. узел (необязательный аргумент) – это аппаратный адрес. Если узел не указан, функция uuid.getnode() используется для получения универсально администрируемых MAC-адресов текущего хозяин.
  2. clock_seq (необязательные аргументы). Если указан clock_seq, он используется в качестве порядкового номера. В противном случае выбирается случайный 14-битный порядковый номер.
>>> import uuid
>>>   
>>> # create random id using uuid1()
>>> print (uuid.uuid1())
1cd41c6c-0c8b-11ed-99a5-4ef9ffba3979
>>>
>>> 
>>> print("Use of node and clock sequence")
Use of node and clock sequence
>>> clock_seq = 12345
>>> node = 0xcff5894d4a1
>>> print(uuid.uuid1(node, clock_seq))
ffccfc5e-0c91-11ed-b039-0cff5894d4a1
>>>

UUID1 можно представить следующим образом.

  • bytes: возвращает идентификатор в виде 16-байтовой строки.
  • int: возвращает идентификатор в виде 128-битного целого числа.
  • hex: возвращает случайный идентификатор в виде 32-символьной шестнадцатеричной строки.
>>>
>>> print (uuid.uuid1().bytes)
b'\x85=\xb6\n\x0c\x8b\x11\xed\x99\xa5N\xf9\xff\xba9y'
>>>
>>> print (uuid.uuid1().int)
191823577517340702579004174172713269625
>>>
>>> print (uuid.uuid1().hex)
8922c8460c8b11ed99a54ef9ffba3979
>>>

Вы также можете получить версию и вариант UUID.

>>> print (uuid.uuid1().version)
1
>>> print (uuid.uuid1().variant)
specified in RFC 4122
>>>

Структура/поля UUID()

  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. узел: последние 48 бит идентификатора.
  7. время: поле компонента времени идентификатора.
  8. clock_seq : 14-битный порядковый номер.

Проблема с uuid1()

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

Использование uuid4()

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

>>> import uuid
>>> print("uuid.uuid4() to genrate unique indentier")
uuid.uuid4() to genrate unique indentier
>>> uuid.uuid4()
UUID('406bf9bc-14cc-4a59-925d-ab05e8cea65e')
>>> print(uuid.uuid4())
698290aa-d573-4bf6-89ff-d29dae5baaeb
>>>

Использование uuid3() и uuid5()

Синтаксис:uuid3()

Он генерирует UUID на основе хэша MD5 идентификатора пространства имен (который является UUID) и имени (строка)

uuid.uuid3(namespace, name)

Синтаксис:uuid5()

Он генерирует UUID на основе хэша SHA-1 идентификатора пространства имен (который является UUID) и имени (строка).

uuid.uuid5(namespace, name)

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

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

пример uuid3():

>>> import uuid
>>> name = 'foo.com'
>>> print('Generate uuid3')
Generate uuid3
>>> print(uuid.uuid3(uuid.NAMESPACE_DNS, name))
4868a96a-8ce0-3f92-b264-08f0038b01d8
>>>

пример uuid5():

>>> import uuid
>>> name = 'foo.com'
>>> print('Generate uuid5')
Generate uuid5
>>> print(uuid.uuid5(uuid.NAMESPACE_DNS, name))
cb2b0427-a119-5e0e-b044-484d51ea6a2f
>>>

Заключение

В блоге мы видели различные способы генерации UUID в Python.

Ссылка:



Если этот пост был полезен, пожалуйста, несколько раз нажмите кнопку аплодисментов 👏, чтобы выразить свою поддержку автору 👇

🚀Разработчики: учитесь и развивайтесь, не отставая от того, что важно, ПРИСОЕДИНЯЙТЕСЬ К FAUN.