Python文档精要研读系列:hash函数

时间:2022-04-25
本文章向大家介绍Python文档精要研读系列:hash函数,主要内容包括hash(object)、名词解释、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

hash(object)

Return the hash value of the object (if it has one). Hash values are integers. They are used to quickly compare dictionary keys during a dictionary lookup. Numeric values that compare equal have the same hash value (even if they are of different types, as is the case for 1 and 1.0).

Python中的hash函数用于求取一个字符串或者数值的哈希值,由于Python中任何数据类型都可以转换为字符串,所以我们利用这个函数来进行简单的哈希值计算,比如:

hash('test')

如此便可以求得字符串'test'的哈希值,同样,如果是数值的话:

hash(1)

不但如此,我们也可以求取list的哈希值:

hash(str([1,2,3]))

也可以求得字典的,但是由于字典本身无序(集合也是如此),所以需要加一些小的变动:

hash(str(sorted({'1':1})))

先将字典排序,而后转为字符串,最后求得哈希值。 倘若是字典嵌套字典,可以对其中的每一个子字典求哈希值,而后求和:

#Return hash for a dict which may contain a dict as its value
def DHash(Dict):
    dh=0
    for tmp in Dict:
        if isinstance(Dict[tmp],dict):
            dh+=hash(tmp)+hash(str(sorted(Dict[tmp],key=lambda d: d[0])))
        else:
            dh+=hash(tmp)+hash(str(Dict[tmp]))`
    return dh

名词解释

hash

散列函数(或散列算法,又称哈希函数,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值(hash values,hash codes,hash sums,或hashes)的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。

MD4

MD4是麻省理工学院教授Ronald Rivest于1990年设计的一种信息摘要算法。它是一种用来测试信息完整性的密码散列函数的实行。其摘要长度为128位。这个算法影响了后来的算法如MD5、SHA家族和RIPEMD等。

MD5

MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由罗纳德·李维斯特设计,于1992年公开,用以替换MD4算法。这套算法的程序在 RFC 1321 中被加以规范。