gpt4 book ai didi

uuid - 您可以从 UUID 中提取什么类型的数据?

转载 作者:行者123 更新时间:2023-12-02 07:49:01 27 4
gpt4 key购买 nike

我知道我们可以轻松提取 uuid 版本号。有没有可靠的方法来提取时间戳、MAC 地址等信息?

谢谢!

最佳答案

符合标准的 UUID 可能是多种变体之一,它看起来像这样:

AAAAAAAA-BBBB-CCCC-DDDD-FFFFFFFFFFFF

DDDD 部分的第一个(十六进制)数字决定了变体。

如果是 8,9,A,B 之一,则符合当前规范(0-7保留用于向后兼容,C、D保留给微软,E、F保留供将来使用)

如果符合当前规范,请检查确定 UUID 版本的 CCCC 部分的第一位数字:

  1. 基于时间,具有唯一或随机主机标识符 (MAC)
  2. DCE 安全版本(带有 POSIX UID)
  3. 基于名称(MD5 哈希)
  4. 随机
  5. 基于名称(SHA-1 哈希)

版本 4 只是随机选择的。

版本 3 和版本 5 是通过散列并丢弃一些位生成的,这意味着您基本上没有机会从中恢复任何信息。有关如何构建它的详细信息可以在 RFC4122 中找到。或访问UUID Generator webpage .

我找不到任何版本 2 UUID,因此我没有检查如何提取数据。

版本 1 由时间戳和当前主机 MAC 地址生成。(如果您设置了 MAC 地址的“广播/多播”位,该标准还允许使用随机地址。)

以下 perl 片段从版本 1 uuid 中解析 MAC 地址和时间:

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 partitions .

关于uuid - 您可以从 UUID 中提取什么类型的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1709600/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com