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)
Параметры
- узел (необязательный аргумент) – это аппаратный адрес. Если узел не указан, функция uuid.getnode() используется для получения универсально администрируемых MAC-адресов текущего хозяин.
- 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()
- time_low: первые 32 бита идентификатора.
- time_mid: следующие 16 бит идентификатора.
- time_hi_version: следующие 16 бит идентификатора.
- clock_seq_hi_variant : следующие 8 бит идентификатора.
- clock_seq_low: следующие 8 бит идентификатора.
- узел: последние 48 бит идентификатора.
- время: поле компонента времени идентификатора.
- 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().
- UUID.NAMESPACE_DNS:этоозначает полное доменное имя. Например, foo.com.
- UUID.NAMESPACE_URLКогда это пространство имен определено, это означает, что это URL-адрес.
- UUID.NAMESPACE_OID Когда это пространство имен определено, строка имени представляет собой OID ISO.
- 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.
Ссылка: