给定Python中字符串的sha256哈希:
import hashlib
hash = hashlib.sha256('foobar'.encode('utf-8'))
如何将“哈希”转换为“UUID”?
注意:显然,在十六进制摘要(hexdigest)和 UUID 之间存在一对多的映射,因为十六进制摘要有2^256个可能的值,而UUID只有2^128个可能的值。
感谢您的考虑和回复。
考虑到 UUID
接受32个十六进制字符的输入字符串,而hexdigest
生成了64个字符,一个简单的方法是通过对生成的哈希摘要进行子索引来实现所需的字符串长度:
import hashlib
import uuid
hash = hashlib.sha256('foobar'.encode('utf-8'))
uuid.UUID(hash.hexdigest()[::2])
hash.hexdigest()[:16]
? - Garrett你可以先创建一个KDF哈希,这样你就可以选择哈希中所需的字节数来适配UUID。
import hashlib
import uuid
uuid.UUID(bytes=hashlib.pbkdf2_hmac('sha256', b'foobar', b'', 10**6, dklen=16))
pbkdf2_hmac
的第三个参数)。
UUID
库接受长度为 32 的十六进制字符串,而 sha256 hexdigest 的长度为 64。 - Ramón J Romero y Vigil