SHA
概要
SHA 全称 Secure Hash Algorithm(安全Hash算法),是由美国NSA和NIST两个组织共同发布的一系列密码散列函数。SHA算法和MD5一样,是一种散列(Hash)算法,除了算法不一样,它返回值也长于MD5的128位二进制。
SHA 算法由较多种,主要经历了SHA-0、SHA-1、SHA-2、SHA-3这几个阶段。目前常见的SHA算法有:SHA-1、SHA-224、SHA-256、SHA-384、SHA-512,它们分别返回160、224、256、384、512位二进制。
- SHA-0算法古老不安全几乎绝迹了。
- SHA-2由美国国家安全局研制,算是SHA-1算法的后继者。其中,SHA-2有细分了六个不同的算法标准:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。这些算法的差异在于,生成摘要的长度、循环的次数等一些比较微小的差距,其算法的基本结构是一致的。
- 目前一些比特币和CA证书就是使用SHA-256加密的。
- SHA-3相对于SHA-2可以说是一种全新算法,但返回值位数和SHA-2一样,它是SHA-2的备用并不是取代,目前主流还是使用SHA-2。为了安全性,甚至可以将这两种算法一起使用。
MD5 和 SHA 对比
MD5 和 SHA1 的对比
MD5(Message Digest) | SHA1(Secure Hash Algorithm) |
---|---|
与SHA1相比,MD5在速度上仍然更快且更可靠。 | 与MD5相比,SHA1的速度相对较慢。 |
消息摘要的长度为168位 | SHA1消息散列的最大长度为160位。 |
与SHA1相比,MD5很简单 | SHA1比MD5更复杂 |
攻击者需要2^128次操作才能使用MD5算法程序生成第一条消息。 | 攻击者需要2^160次操作 |
攻击者需要2^64次操作才能找出是否有两个消息共享相同的消息摘要。 | 攻击者需要进行2^80次操作,才能找出具有相同哈希或摘要的两条消息。 |
MD5提供较差或较弱的安全性 | SHA1提供可容忍或平衡的安全性。 |
各种算法产生的摘要示例:
MD5:
fcd34772920cf22d3e8b9a7466e33e4fSHA-1:
768725e2f1576b240f82cde819ef91545af6afd1SHA-256:
ff5b185c2eb56587a40eb547945753ce24a165abbc6f7b2b9cc76a665b9dd984SHA-384:
7e5d3277d43033d9252c932931c83c02329babac271b1e7a14e7a0bfa80e32932b6551eec56727e107f143f2d3ee507fSHA-512:
54134f6390362cfd748cc28549e98aef0f3403502b0a11558dce9f80f966e862b8fc9177451baeafdaa62a847072350bb6218ef1e32fba3fa6e781d966a14ff3
算法 | bit | byte | char |
---|---|---|---|
MD5 | 128 | 16 | 32 |
SHA-1 | 40 | 20 | 40 |
SHA-256 | 256 | 32 | 64 |
SHA-384 | 384 | 48 | 96 |
SHA-512 | 512 | 64 | 128 |
总结
- 如果是防篡改场景,建议使用 MD5,因为它计算快速,摘要长度短。
- 如果是防偷窥场景,必须使用 SHA-256 或更大长度的摘要算法。
- 为避免彩虹表攻击,必须加盐。
SHA
https://flepeng.github.io/035-密码学-03-MD5、SHA、SM3-SHA/