在python中将sha256摘要转换为UUID

在python中将sha256摘要转换为UUID,python,hash,uuid,sha256,Python,Hash,Uuid,Sha256,给定python中str的sha256哈希: import hashlib hash = hashlib.sha256('foobar'.encode('utf-8')) 如何将散列转换为UUID? 注意:如果一个hexdigest有2^256可能的值,而一个UUID有2^128,那么显然会有一个hexdigest到UUID的多对一映射 提前感谢您的考虑和回复。鉴于UUID采用32个十六进制字符的输入字符串,并且hexdigest生成64个字符,一种简单的方法是对生成的哈希摘要进行子索引,以

给定python中
str
的sha256哈希:

import hashlib

hash = hashlib.sha256('foobar'.encode('utf-8'))
如何将
散列
转换为
UUID

注意:如果一个hexdigest有
2^256
可能的值,而一个UUID有
2^128
,那么显然会有一个hexdigest到UUID的多对一映射


提前感谢您的考虑和回复。

鉴于
UUID
采用32个十六进制字符的输入字符串,并且
hexdigest
生成64个字符,一种简单的方法是对生成的哈希摘要进行子索引,以获得适当的字符串长度:

import hashlib
import uuid


hash = hashlib.sha256('foobar'.encode('utf-8'))

uuid.UUID(hash.hexdigest()[::2])

您可以首先创建它的KDF散列,它允许您在散列中选择所需的字节长度,以便将其放入UUID中

导入hashlib
导入uuid
uuid.uuid(字节=hashlib.pbkdf2_hmac('sha256',b'foobar',b'',10**6,dklen=16))

如果此解决方案适合您,您应该确定16字节KDF是否会影响您的任何安全需求。而且,您可能也希望使用salt(pbkdf2_hmac的第三个参数)

您是否尝试使用?@mkrieger1
UUID
库接收长度为32的十六进制字符串,而sha256 hexdigest的长度为64。使用32个字符的散列(如,shubder,MD5…)散列值…?