【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-224 | 224 bit, 56 字元 |
sha-256 | 256 bit, 64 字元 |
sha-384 | 384 bit, 96 字元 |
sha-512 | 512 bit, 128 字元 |
sha-512/224 | |
sha-512/256 | |
sha3-224 | |
sha3-256 | |
sha3-384 | |
sha3-512 |
- 曾經的加密“王者”SHA-1将被停止使用
【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兩大密碼算法。
【相關閱讀】
- Hash 線上工具
- 關于 base32 編碼
- List of hash functions
- MD5 SHA1 哈希 簽名 碰撞 MD