在 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 的第三个参数)。