【Hash 算法的评价维度】

  • 正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。

  • 逆向困难:给定hash 值,在有限时间内很难逆推出明文。

  • 输入敏感(雪崩效应):原始输入信息修改一点信息,产生的 hash 值看起来应该都有很大不同。

  • 冲突避免:很难找到两段内容不同的明文,使得它们的 hash 值一致。


【SHA家族】

  • 安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。且若输入的消息不同,它们对应到不同字符串的机率很高。

  • 家族成员

SHA家族有五个算法,分别是 SHA-1, SHA-224, SHA-256, SHA-384, SHA-512
它们是美国的政府标准,后面的四个称之为SHA-2
SHA-3第三代安全散列算法,基于Keccak(念作/ˈkɛtʃæk/或/kɛtʃɑːk/))算法,
NIST在2015年8月完成标准化时调整了填充算法,标准的SHA3和原先的Keccak算法就有所区别了。
  • 位数对比

sha-1
160 bit, 40 字符
sha-224224 bit, 56 字符
sha-256256 bit, 64 字符
sha-384384 bit, 96 字符
sha-512512 bit, 128 字符
sha-512/224224 bit, 56 字符
sha-512/256256 bit, 64 字符
sha3-224224 bit, 56 字符
sha3-256256 bit, 64 字符
sha3-384384 bit, 96 字符
sha3-512512 bit, 128 字符



【MD家族】

  • 消息摘要算法( Message-Digest Algorithm)

  • 家族成员

MD4, MD5


【Murmur哈希】

  • MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。

  • 家族成员

MurmurHash1, MurmurHash2, MurmurHash3
  • Python3 示例代码

>>> import binascii
>>> import mmh3
>>> binascii.b2a_hex(mmh3.hash_bytes('filename')).decode('utf8')
'983b90227c24f9d76dfb9443d8ebbf0e'    # 32个字符,128 bit


【CityHash】

  • CityHash 系列字符串散列算法是由著名的搜索引擎公司Google 发布的 (http://www.cityhash.org.uk/)。Google发布的有两种算法:cityhash64 与 cityhash128。它们分别根据字串计算 64 和 128 位的散列值。这些算法不适用于加密,但适合用在散列表等处。

  • CityHash 常用来与 MurmurHash 做对比。


【OTHRE】

  • 王小云教授带领的研究小组于2004年、2005年先后破解了被广泛应用于计算机安全系统的MD5和SHA-1两大密码算法。


【相关阅读】


*** walker ***