首页 > 解决方案 > 我可以散列一个 UUID 以获得更高的熵吗 - Python

问题描述

如果我用类似的东西生成一个 UUID

ID = uuid.uuid4()

我得到一个具有 122 位熵的 128 位字符串。

但是我想要一个熵超过 128 位的字符串。

如果我将此 uuid 通过散列函数放置,字符串的熵将如何变化。

例如:

ID = uuid.uuid4()
ID = HASHFUNC(ID)

甚至:

ID = uuid.uuid4()
Salt = someString
ID = HASHFUNC(ID+Salt)

简单地使用 os.urandom(32) 并完成它会更好吗?

谢谢您的帮助

标签: pythonrandomtokenuuidentropy

解决方案


不,你不能。

尽管对具有 2 122 个可能值的字符串进行散列处理会得到 128 位结果,但仍然只有 2 122 个可能的结果,因此每个散列后的 UUID 仍然只携带 122 位信息。

要么使用os.urandom(16)(因为 16 字节足以容纳 128 位熵),要么使用secrets模块(如果您使用的是 Python 3.6)。


推荐阅读