Подскажите 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 ...
Помню когда-то , 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]
[Орден Могильной Лопаты]
А вот основные поля 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