Какие данные можно извлечь из UUID?

@Brian R. Bondy: Обратите внимание на то, что это не решение, как только Ваша команда достигает определенного количества людей/задач, обработанных параллельно на проекте.

, Как только отдел QA вовлечен в обеспечение качества, усилия должны были обеспечить, одна установка на происходящее ответвление просто слишком высоки. Думайте SOA/клиенты/серверы/веб-сервисы/базы данных , все из которых должны быть обеспечены на ответвление .

Это решение испытывает недостаток также в этапе интеграции.

21
задан Chris Frost 10 November 2009 в 17:13
поделиться

4 ответа

Соответствующий стандарту UUID может быть одним из нескольких вариантов, он выглядит следующим образом:

AAAAAAAA-BBBB-CCCC-DDDD-FFFFFFFFFFFF

Первая (шестнадцатеричная) цифра номера Часть DDDD определяет вариант.

Если это один из 8,9, A, B, он соответствует текущей спецификации (0-7 зарезервированы для обратной совместимости, C, D зарезервированы для Microsoft, а E, F зарезервированы для использования в будущем)

Если это соответствует текущей спецификации, проверьте первую цифру частиCCCC, которая определяет Версия UUID:

  1. На основе времени с уникальным или случайным идентификатором хоста (MAC)
  2. Версия безопасности DCE (с UID POSIX)
  3. На основе имени (хэш MD5)
  4. Случайно
  5. На основе имени ( SHA-1 hash)

Просто случайным образом выбирается версия 4.

Версии 3 и 5 генерируются путем хеширования и отбрасывания некоторых битов, что означает, что у вас практически нет шансов восстановить какую-либо информацию из них. Подробную информацию о том, как его создать, можно найти в RFC4122 или на веб-странице UUID Generator .

Мне не удалось найти UUID версии 2, поэтому я не проверял, как извлечь данные. (Стандарт также позволяет использовать случайный адрес вместо этого, если вы устанавливаете бит «широковещательная / многоадресная рассылка» MAC-адреса.)

Следующий фрагмент perl анализирует MAC-адрес и время из uuid версии 1:

my $uuid="AAAAAAAA-BBBB-CCCC-DDDD-FFFFFFFFFFFF";
$uuid=~tr/-//d;
my $time_low=hex substr($uuid,2* 0,2*4);
my $time_mid=hex substr($uuid,2* 4,2*2);
my $version =hex substr($uuid,2* 6,1);
my $time_hi =hex substr($uuid,2* 6+1,2*2-1);

my $time=($time_hi*(2**16)+$time_mid)*(2**32)+$time_low;
my $epoc=int($time /10000000) - 12219292800;
my $nano=$time-int($time/10000000)*10000000;

my $clk_hi  =hex substr($uuid,2* 8,2*1);
my $clk_lo  =hex substr($uuid,2* 9,2*1);
my $node    =substr($uuid,2*10,2*6);

$node=~/^(..)(..)(..)(..)(..)(..)$/ || die;
$node="$1:$2:$3:$4:$5:$6";

print "time: ",scalar localtime $epoc," +",$nano/10000,"ms\n";
print "clock id: ",$clk_hi*256+$clk_lo,"\n";
print "Mac: $node\n";

my $byte=hex $1;
if(hex($1)&1){
    print "broadcast/multicast bit set.\n";
};

И И последнее, но не менее важное: есть несколько назначенных UUID, например, для разделов GPT .

45
ответ дан 29 November 2019 в 06:29
поделиться

Не обязательно надежный способ, потому что в зависимости от типа UUID он может быть сгенерирован полностью из случайных битов, на основе временных меток или на основе MAC-адреса. Так что вы можете получить часть этой информации, но вы не можете гарантировать, что получите что-нибудь.

Официальная ссылка на это RFC 4122 , которая, вероятно, должна дать вам достаточно информации для извлечения данные, хотя вам, вероятно, не стоит слишком на них полагаться.

8
ответ дан 29 November 2019 в 06:29
поделиться

You could look at the version of the Uuid, but that can only be trusted if you are sure the Uuid is valid (see http://tools.ietf.org/html/rfc4122). The version will tell you what kind of Uuid you have, and using that you can extract specific bits of information.

2
ответ дан 29 November 2019 в 06:29
поделиться

Если это UUID версии 1, MAC-адрес будет состоять из последних двенадцати шестнадцатеричных цифр.

3
ответ дан 29 November 2019 в 06:29
поделиться