UUID означает универсальный уникальный идентификатор — это библиотека Python, которая помогает генерировать случайные объекты из 128 бит в качестве идентификаторов. Он обеспечивает уникальность, поскольку генерирует идентификаторы на основе времени, аппаратного обеспечения компьютера (MAC и т. д.). В этом посте мы увидим, как использовать модуль Python UUID для создания универсальных уникальных идентификаторов.
- Что такое UUID?
- Представления uuid1()
- Компоненты uuid1()
- Поля uuid1()
- Генерация случайных идентификаторов, используя UUID.uuid1()
- Синтаксис
- Параметры
- Создание уникального идентификатора для хоста, используя node и clock sequence
- Недостаток uuid1()
- Генерация случайных идентификаторов с помощью UUID.uuid4()
- Применение uuid3() в генерации
- Генерация случайных идентификаторов с помощью uuid5()
- Когда и зачем использовать UUID
- Заключение
Что такое UUID?
UUID — это 128-битный номер или идентификатор для уникальной идентификации конфиденциальной или нечувствительной информации, такой как файлы, пользователи, ресурсы или информация в компьютерных системах.
- UUID может обеспечить уникальность идентификаторов во всем пространстве и во времени. Когда мы говорим о пространстве и времени, это означает, что UUID генерируется в соответствии со стандартом. Идентификатор не дублирует уже созданный или тот, что будет создан для идентификации чего-то другого.
- Поэтому 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.
- UUID1 генерирует UUID, используя MAC-адрес хоста, серийный (порядковый) номер и текущее время. Версия uuid1 использует MAC-адреса IEEE 802.
- UUID3 и UUID5 используют криптографическое хеширование и предоставленные приложением текстовые строки для генерации UUID. UUID 3 использует хеширование MD5, а UUID 5 использует хеширование SHA-1.
- UUID4 использует генераторы псевдослучайных чисел для генерации UUID. Это более безопасно.
Представления uuid1()
- bytes: возвращает идентификатор в виде 16-байтовой строки.
- int: возвращает идентификатор в виде 128-битного целого числа.
- hex: возвращает случайный идентификатор в виде 32-символьной шестнадцатеричной строки.
Компоненты uuid1()
- version: это номер версии UUID.
- variant: это вариант, определяющий внутреннюю компоновку UUID.
Поля uuid1()
- time_low: первые 32 бита идентификатора.
- time_mid: следующие 16 бит идентификатора.
- time_hi_version: следующие 16 бит идентификатора.
- clock_seq_hi_variant: следующие 8 бит идентификатора.
- clock_seq_low: следующие 8 бит идентификатора.
- node: последние 48 бит идентификатора.
- time: поле компонента времени идентификатора.
- clock_seq : 14-битный порядковый номер.
Давайте извлечем и распечатаем указанную выше информацию для uuid.uuid1().
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import uuid UUID = uuid.uuid1() print("UUID is ", UUID) print("UUID Type is ", type(UUID)) print('UUID.bytes :', UUID.bytes) print('UUID.bytes_le :', UUID.bytes_le) print('UUID.hex :', UUID.hex) print('UUID.int :', UUID.int) print('UUID.urn :', UUID.urn) print('UUID.variant :', UUID.variant) print('UUID.version :', UUID.version) print('UUID.fields :', UUID.fields) print("Prining each field seperately") print('UUID.time_low : ', UUID.time_low) print('UUID.time_mid : ', UUID.time_mid) print('UUID.time_hi_version : ', UUID.time_hi_version) print('UUID.clock_seq_hi_variant: ', UUID.clock_seq_hi_variant) print('UUID.clock_seq_low : ', UUID.clock_seq_low) print('UUID.node : ', UUID.node) print('UUID.time : ', UUID.time) print('UUID.clock_seq : ', UUID.clock_seq) print('UUID.SafeUUID : ', UUID.is_safe) |
Выход:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
UUID is a1bd0546-9b5f-11ea-899c-d0817acce8e4 UUID Type is <class 'uuid.UUID'> UUID.bytes : b'\xa1\xbd\x05F\x9b_\x11\xea\x89\x9c\xd0\x81z\xcc\xe8\xe4' UUID.bytes_le : b'F\x05\xbd\xa1_\x9b\xea\x11\x89\x9c\xd0\x81z\xcc\xe8\xe4' UUID.hex : a1bd05469b5f11ea899cd0817acce8e4 UUID.int : 214987158433739041298017178985725487332 UUID.urn : urn:uuid:a1bd0546-9b5f-11ea-899c-d0817acce8e4 UUID.variant : specified in RFC 4122 UUID.version : 1 UUID.fields :(2713519430, 39775, 4586, 137, 156, 229254529607908) Prining each field seperately UUID.time_low : 2713519430 UUID.time_mid : 39775 UUID.time_hi_version : 4586 UUID.clock_seq_hi_variant: 137 UUID.clock_seq_low : 156 UUID.node : 229254529607908 UUID.time : 138093573625939270 UUID.clock_seq : 2460 UUID.SafeUUID : SafeUUID.unknown |
Генерация случайных идентификаторов, используя UUID.uuid1()
Модуль Python UUID предоставляет метод uuid1(), который генерирует случайный идентификатор, используя MAC-адрес и компонент времени.
Синтаксис
|
1 |
uuid.uuid1(node=None, clock_seq=None) |
Параметры
- node и clock_seq являются необязательными аргументами.
- node — это аппаратный адрес, представляющий собой 48-битное положительное целое число. Если узел не указан, то функция uuid.getnode() используется для получения универсально администрируемых MAC-адресов текущего хоста.
- Если указан clock_seq, он используется как порядковый номер. В противном случае выбирается случайный 14-битный порядковый номер.
Пример:
|
1 2 3 4 |
import uuid print("The random id using uuid1() is : ") print(uuid.uuid1()) |
Выход:
|
1 2 |
The random id using uuid1() is : d8ed6420-9b50-11ea-9dad-d0817acce8e4 |
Вы можете видеть, что мы сгенерировали случайный идентификатор. Теперь мы можем использовать этот идентификатор в любом месте нашего приложения или использовать его в криптографии для дальнейшего усиления шифрования.
Создание уникального идентификатора для хоста, используя node и clock sequence
Мы можем применить последовательность узлов и часов для явного функционирования.
|
1 2 3 4 5 6 |
import uuid print("Use of node and clock sequence") clock_seq = 1111 node = 0xcff7894d4a0 print(uuid.uuid1(node, clock_seq)) |
Выход:
|
1 2 |
Use of node and clock sequence 9569ef86-9b58-11ea-8457-0cff7894d4a0 |
Метод uuid.getnode() используется для получения MAC-адреса сетевого интерфейса. Если машина имеет более одной сети с универсальным администрированием, то MAC-адреса возвращаются вместо локально администрируемых MAC-адресов.
Администрируемые MAC-адреса гарантированно будут глобально уникальными, если функция getnode() не сможет получить MAC-адрес; она возвращает случайное 48-битное число с многоадресным битом, как рекомендовано в RFC 4122.
Недостаток uuid1()
Основным недостатком метода uuid1() является то, что этот способ включает использование MAC-адреса компьютера и, следовательно, может поставить под угрозу конфиденциальность, даже если он обеспечивает уникальность. Таким образом, метод uuid1() бесполезен в приложениях, чувствительных к данным.
Генерация случайных идентификаторов с помощью UUID.uuid4()
Функция Python uuid.uuid4() возвращает случайное число. И не идет на компромисс с конфиденциальностью.
|
1 2 3 4 |
import uuid print("The random id using uuid4() is : ") print(uuid.uuid4()) |
Выход:
|
1 2 |
The random id using uuid4() is : 2f98f4b1-81ff-4876-b0f5-a48979b04219 |
На выходе 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().
- UUID.NAMESPACE_DNS: это означает полное доменное имя. Например, google.com.
- UUID.NAMESPACE_URL: когда это пространство имен определено, это означает, что это URL-адрес.
- UUID.NAMESPACE_OID: когда это пространство имен определено, строка имени представляет собой OID ISO.
- UUID.NAMESPACE_X500: Когда оно определено, строка имени представляет собой DN X.500 в формате DER или текстовом формате вывода.
Давайте сгенерируем случайные идентификаторы, используя uuid3().
|
1 2 3 4 5 6 7 |
import uuid hosts = ['google.com', 'facebook.com', 'amazon.com'] for host in hosts: print('Generate uuid3') print(uuid.uuid3(uuid.NAMESPACE_DNS, host)) |
Выход:
|
1 2 3 4 5 6 |
Generate uuid3 9a74c83e-2c09-3513-a74b-91d679be82b8 Generate uuid3 1e93767f-9f44-31f4-aa41-08c8da88a58c Generate uuid3 c9485c47-6e77-30b4-88da-bbac9aa4ebf2 |
UUID, сгенерированные в разное время с использованием одного и того же пространства имен и одного имени, равны. Уникальные идентификаторы, сгенерированные из двух разных имен в одном и том же пространстве имен, различаются. UUID, сгенерированные из одного и того же имени в двух разных пространствах имен, отличаются.
Генерация случайных идентификаторов с помощью uuid5()
Мы можем применить ту же формулу из приведенной выше функции, но разница в том, что на этот раз мы используем функцию uuid5().
|
1 2 3 4 5 6 7 |
import uuid hosts = ['google.com', 'facebook.com', 'amazon.com'] for host in hosts: print('Generate uuid5') print(uuid.uuid5(uuid.NAMESPACE_DNS, host)) |
Выход:
|
1 2 3 4 5 6 |
Generate uuid5 64ee70a4-8cc1-5d25-abf2-dea6c79a09c8 Generate uuid5 03d4c789-f11c-533a-a48c-31ba2319170b Generate uuid5 a7846505-8bcc-57b5-a555-e1f871002f46 |
Когда и зачем использовать UUID
В настоящее время одним из наиболее часто используемых приложений является криптография и кибербезопасность. Если вы идете в банк, то когда вы вносите деньги, создается транзакция, а затем генерируется идентификатор транзакции. Теперь мы можем использовать здесь для создания идентификатора транзакции. Мы можем использовать UUID для создания идентификатора транзакции. Так что в финансовых приложениях это может быть полезно.
UUID также полезны для создания уникального идентификатора сеанса, чтобы помочь управлению состоянием. Если вы работаете с Laravel или другим PHP Framework, то вы видели, что мы создаем идентификатор пользователя, используя технику автоинкремента. В котором каждый раз, когда создается пользователь, мы будем увеличивать его идентификатор на единицу. В этом случае мы можем легко угадать идентификатор пользователя.
Когда вы используете UUID, трудно угадать идентификатор, потому что UUID не создается в каком-либо серийном формате, поэтому трудно угадать, это серийный номер или последовательность. Таким образом, это может быть полезно и в веб-разработке. UUID имеет значительное преимущество, поскольку UUID не зависит от окружающей среды. т. е. UUID, сгенерированный на любой машине с помощью любого приложения, является универсально уникальным.
Заключение

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