mwk*_*son 2 python uuid hashlib
我正在尝试使用以下函数创建唯一的记录ID:
import hashlib
from base64 import b64encode
def make_uid(salt, pepper, key):
s = b64encode(salt)
p = b64encode(pepper)
k = b64encode(key)
return hashlib.sha256(s + p + k).hexdigest()
Run Code Online (Sandbox Code Playgroud)
在哪里pepper
设置如下:
uuid_pepper = uuid.uuid4()
pepper = str(uuid_pepper).encode('ascii')
Run Code Online (Sandbox Code Playgroud)
而salt
和key
是为每个请求的值相同.
我的问题是,由于辣椒的独特性,make_uid
这种情况总会返回一个独特的价值,或者它是否有可能产生重复?
该建议的答案是不同的,因为我不要求有关各种UUID类型的独特性,我想知道它是否在所有可能的SHA256哈希创建两个不同的输入之间的冲突.
我想您想知道的是SHA256是否可以保证生成唯一的哈希结果.答案是肯定的,不是.我的研究得出以下结果,不是100%准确但非常接近.
从理论上讲,SHA256会发生碰撞.它有2^256
结果.因此,如果我们哈希2^256 + 1
时间,必然会发生冲突.更糟糕的是,据统计,在2^130
哈希时间内发生碰撞的可能性更大99%.
但是你可能不会在你的一生中生成一个.假设我们有一台可以计算每秒10,000次哈希的计算机.这台计算机需要花费数4 * 10^27
年才能完成2^130
哈希.你可能不知道这个数字有多大.进行散列的年数是2 * 10^22
人类存在的时间.这意味着即使你从我们在地球上的第一天到现在开始进行散列,碰撞的可能性仍然非常小.
希望这能回答你的问题.
归档时间: |
|
查看次数: |
1807 次 |
最近记录: |