SHA1哈希是否均匀分布?

时间:2015-11-06 00:12:08

标签: hash probability sha1

我在Python中有一个字符串。我用hashlib计算该字符串的SHA1哈希值。我将其转换为十六进制表示形式,并将最后16个字符用作标识符:

hash_str = "foobarbazάλφαβήταγάμμα..."
hash_obj = hashlib.sha1(hash_str, encode('utf-8'))
hash_id  = hash_obj.hexdigest()[:16]

我的目标是提供合理长度的标识符,并且不太可能为不同的hash_id输入产生相同的hash_str值。

如果SHA1冲突的概率是1 /(2 ^ 160),或1 /(16 ^ 40),那么如果我采用十六进制表示的最后16个字符,则碰撞的概率仅为1 / (16的16次方)?或者字节(或它们的十六进制等值)不均匀分布?

1 个答案:

答案 0 :(得分:4)

是。任何具有uniformity属性的散列函数都有相同的机会,其输出范围中的任何值都是由随机选择的输入值生成的。因此,截断散列的每个值也同样可能。 SHA-1是散列函数,表现出一致性,因此您的猜想是正确的。