2016-11-29 57 views
0

它可以颠倒吗? 如果我使用如何将Python uuid5()转换为它的值?

>>> RESOURCE_ID_NAMESPACE = uuid.UUID('0a7a15ff-aa13-4ac2-897c-9bdf30ce175b') 
>>> value = 'test' 
>>> uuid.uuid5(RESOURCE_ID_NAMESPACE, value) 
UUID('7fd19145-920f-5b9c-be0a-2146b0c39949') 

,如果我知道uuid5值,可我得到的值“测试”?

非常感谢。

+1

如果您提供了更多关于为什么要这样做的背景知识,我们可能会提供更多帮助。只是颠倒散列是不可能的设计。 – yelsayed

+0

事实上,这是Openstack Gnocchi项目(Liberity版本)中的一个问题.Gnocchi使用其他Openstack项目的uuid保存时间序列数据,并且uuid由uuid5散列。这导致我无法使用hasded uuid在其他Openstack项目中找到资源。我需要取回原始ID。现在最新版本解决了该问题。但它仍然保留在Liberity版本中。 – zero

回答

2

UUID版本5是based on the SHA-1 hash of the input。密码哈希算法的重点在于,在一般情况下,它们几乎不可能逆转。

如果你知道输入是一个字典单词,当然,你可以为字典中的每个单词生成一个uuid5值,当你知道它是一个简短的字符串时也是如此,但是在一般情况下,没有,您无法将UUID5的值反转为比加密哈希值更高的值。不,在这里SHA-1的弱点不太可能有帮助;它们主要用于产生冲突,但不能恢复原始值。

+0

非常感谢,我看到了〜:) – zero

0

不,你不能。 uuid是通过散列您传递给构造函数的名称空间和值创建的。但是有其他可能的字符串(尽管它们可能很难找到)有无数个哈希值相同的值。所以没有办法确定构建uuid的原始字符串是什么。

+0

非常感谢,我明白了。 – zero