在 python 中将 sha256 摘要转换为 UUID
Convert sha256 digest to UUID in python
给定 python 中 str
的 sha256 哈希:
import hashlib
hash = hashlib.sha256('foobar'.encode('utf-8'))
如何将hash
转换为UUID
?
注意:鉴于十六进制有 2^256
可能的值并且 UUID 有 2^128
.
,显然会有十六进制到 UUID 的多对一映射
提前感谢您的考虑和回复。
鉴于 UUID
采用 32 个十六进制字符的输入字符串并且 hexdigest
产生 64 个字符,一个简单的方法是 sub-index 生成的哈希摘要以获得适当的字符串长度:
import hashlib
import uuid
hash = hashlib.sha256('foobar'.encode('utf-8'))
uuid.UUID(hash.hexdigest()[::2])
您可以先为它创建一个 KDF 散列,这样您就可以在散列中选择所需的字节长度以使其适合 UUID。
import hashlib
import uuid
uuid.UUID(bytes=hashlib.pbkdf2_hmac('sha256', b'foobar', b'', 10**6, dklen=16))
如果此解决方案适合您,您应该确定 16 字节的 KDF 是否会危及您的任何安全要求。而且,您可能也想使用盐(pbkdf2_hmac
的第三个参数)。
给定 python 中 str
的 sha256 哈希:
import hashlib
hash = hashlib.sha256('foobar'.encode('utf-8'))
如何将hash
转换为UUID
?
注意:鉴于十六进制有 2^256
可能的值并且 UUID 有 2^128
.
提前感谢您的考虑和回复。
鉴于 UUID
采用 32 个十六进制字符的输入字符串并且 hexdigest
产生 64 个字符,一个简单的方法是 sub-index 生成的哈希摘要以获得适当的字符串长度:
import hashlib
import uuid
hash = hashlib.sha256('foobar'.encode('utf-8'))
uuid.UUID(hash.hexdigest()[::2])
您可以先为它创建一个 KDF 散列,这样您就可以在散列中选择所需的字节长度以使其适合 UUID。
import hashlib
import uuid
uuid.UUID(bytes=hashlib.pbkdf2_hmac('sha256', b'foobar', b'', 10**6, dklen=16))
如果此解决方案适合您,您应该确定 16 字节的 KDF 是否会危及您的任何安全要求。而且,您可能也想使用盐(pbkdf2_hmac
的第三个参数)。