在python中将sha256摘要转换为UUID

问题描述

给出python中list()的sha256哈希:

str

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

注意:鉴于hexdigest具有UUID可能的值,而UUID具有2^256,显然hexdigest与UUID之间存在多对一的映射。

预先感谢您的考虑和答复。

解决方法

假设UUID接受32个十六进制字符输入字符串,而hexdigest产生64个字符,则一种简单的方法是对所得的哈希摘要进行子索引以实现适当的字符串长度:

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