3
我在Python中有一个字符串。我用hashlib
计算该字符串的SHA1哈希值。我将其转换为它的十六进制表示,并采取最后16个字符作为标识符的使用方法:SHA1散列是否均匀分布?
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)?或者是字节(或它们的等效十六进制)不是均匀分布的?
如果sha1是均匀分布的,那么也是它的“数字”。由于sha1被构造为一个安全的散列函数,它应该是均匀分布的或至少非常接近它(如此接近以至于看不到差异)。 – AbcAeffchen