1

例如,我使用以下程序生成基于时间的 UUID。

import uuid
uuid = uuid.uuid1()
print uuid
print uuid.time

我得到以下信息:

47702997-155d-11ea-92d3-6030d48747ec
137946228962896279

47702997-155d-11ea-92d3-6030d48747ec如果我知道时间戳,我可以取回原始 UUID(137946228962896279)吗?

我正在阅读有关 UUID 版本 1 的信息,并发现了一些“有点”试图反转它的程序,但是,每次,我都会得到一个不同的 UUID。

始终在变化的部分是时间戳部分(第一个块的最后 4 位 - 47702997)和 clock_sequence ( 92d3)。

如果可以取回原始 UUID,我需要什么?

非常感谢任何帮助/指导。

我还在 Security Stackexchange 上发了一个帖子,但后来意识到这个问题应该在这里发布。

我越看越发现这根本不可能,因为时间戳不包含有关 clock_sequence 的信息,除非我错了,在这种情况下,请纠正我。

4

1 回答 1

2

UUIDv1 包含两个主要部分:时间唯一部分(也称为时间戳)和空间唯一部分。按照设计,这两者是完全独立的,所以如果你扔掉其中一个,以后就无法从另一个中恢复它。

更一般地,请注意整个 UUID 是 32 位十六进制数字或 128 位信息,但时间戳是 18 位十进制数字,或仅大约 60 位信息。即使对 UUID 了解不多,您也可以猜测其中一些位是冗余或固定的(有些固定的,或者至少是可猜测的),但其中超过一半?不太可能,这意味着这种翻译是不可逆的。

于 2020-01-15T23:29:03.203 回答