问题描述
给出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
的第三个参数)。