GUID

1 view
Skip to first unread message

Ivan Mashchenko

unread,
Aug 24, 2004, 3:03:22 PM8/24/04
to
Good night All !

Подскажите plz как на Java сгенеpиpовать глобально уникальный идентификатоp
(GUID) вида {973E8A93-00C6-4771-9AC2-695EF81BFF05}

Заpанее огpомное спасибо.

Farewell, and let the moon enlight your way, ....
Ivan A. Mashchenko.

... Enjoying the sounds of coolers ...

Dima Shpilevsky

unread,
Aug 26, 2004, 2:21:10 AM8/26/04
to
Еха-ноха, Ivan! Съешь ещё этих мягких французских булок, да выпей чаю!

Помню когда-то , 25 Aug 04 в 00:01, Ivan Mashchenko напиcал для All
нижecлeдyющee:

IM> Подскажите plz как сгенеpиpовать глобально уникальный идентификатоp
IM> (GUID) вида {973E8A93-00C6-4771-9AC2-695EF81BFF05}
IM> а. Сpедствами чистого WinAPI (язык С без MFC).

UuidCreate
UuidFromString
UuidToString

IM> b. Без исползования платфоpмо-специфичных сpедств типа WinAPI, чтобы
IM> одинаково хоpошо pаботало под Windows, DOS и *nix.

не могу сказать что совершенно точно представляю себе алгоритм их генерации,
но думаю что в основе наверняка лежит хэш-функция (например, SHA-1 или MD5),
обрабатывающая некоторую уникальность + энтропию. Из рассчитаного хэш-значения
и составляется GUID. В качетсве уникальности принятно использовать MAC-адрес
сетевой карты (при её отстутсвии функция UuidCreate возвращает
RPC_S_UUID_LOCAL_ONLY, что означает что сгенерированный UID замешан только на
локальной энтропии и не факт что получился глобально уникальным, хотя
вероятность совпадения весьма и весьма низкая.
Сбор энтропии можно позаимствовать у криптопровайдеров от MS. Описание можно
посмотреть в книжке "Защищённый код" (Майкл Ховард, Дэвид Лебланк). Приведу
пару-тройку пунктов:
число тактов процессора с момента загрузки (GetTickCount)
текущее время (GetLocalTime)
показания высокочастотных счётчиков (QueryPerfomanceCounter)
данные пользовательского окружения (environment variables)
+ туча всяких низкоуровневых счётчиков которые лень набивать


...и когда я умру, мои уши, как папоротники, прорастут из земли.

WBR, Чёрный Миссионер [Sacred Shrub Clan]
[Орден Могильной Лопаты]

Tolian Mirin

unread,
Aug 26, 2004, 5:23:54 AM8/26/04
to
Hello Dima.
Формат UUID придуман не Microsoft и строго стандартизован. Гарантированно
отсутствие коллизий до 3400 года.
Исходник, генерирующий UUID можешь поискать в сорцах Linux, я когда то находил
но не помню где. Описалово лежит здесь:
http://www.opengroup.org/onlinepubs/9629399/apdxa.htm

А вот основные поля UUID:

time_low
unsigned long 0-3
The low field of the timestamp.
time_mid
unsigned short 4-5
The middle field of the timestamp.
time_hi_and_version
unsigned short 6-7
The high field of the timestamp multiplexed with the version number.
clock_seq_hi_and_reserved
unsigned small 8
The high field of the clock sequence multiplexed with the variant.
clock_seq_low
unsigned small 9
The low field of the clock sequence.
node
character 10-15
The spatially unique node identifier.


Tolian

Reply all
Reply to author
Forward
0 new messages