概要
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-224、SHA-256、SHA-384、SHA-512一般称为SHA-2。至于SHA-0和SHA-3,SHA-0算法古老不安全几乎绝迹了,SHA-3相对于SHA-2可以说是一种全新算法,但返回值位数和SHA-2一样,它是SHA-2的备用并不是取代,目前主流还是使用SHA-2。
步骤
这里主要基于SHA-1介绍算法步骤,该算法也分为:补位、添加长度、初始化缓存、处理数据、输出这五个步骤,其中补位与添加长度与MD5一致,后面三个稍有不同。
1、补位:补位与添加长度与MD5一致,将最终位数补成对512求模的结果为448,即原文长度补位成只差64位(bit)就是512的整数倍,即使本身长度符合差64位就是512的倍数也要补一次512位,补位规则第一个补1,后面都补0。
2、添加长度:计算补位前的长度,取其二进制的64位,长度数值大于64位的取64位低位,比如长度为8,二进制表示为 1000,前面补60个0就是8的64位二进制表示了。最后消息就是为512的整数倍。
3、初始化缓存:SHA-1需要初始化4个32位的常数K以及5个32位的初始散列值H,这5个H就是初始化的摘要(160位)。K用16进制表示分别为:5A827999(0<=t<=19))、6ED9EBA1(20<=t<=39)、8F1BBCDC (40<=t<=59)、CA62C1D6 (60<=t<=79),H用16进制表示分别为:67452301、EFCDAB89、98BADCFE、10325476、C3D2E1F0。
4、数据处理:初始化常数后,则将K和H以及分组的原文进行循环运算,每次循环需要经过4个函数处理,具体函数如下:
5、输出:最终的5个H(32位)就是SHA1的输出,共160位二进制,转化为16进制输出就是40个字符。
优点
1、安全:相对于MD5来讲,SHA算法更安全,目前SHA-2还没出现碰撞。
2、对原文敏感:哪怕原文有一个二进制的变化,都会导致密文不同(雪崩效应)。
3、算法不可逆:知道密文除了穷举,基本无法可解密出原文。
缺点
1、加密速度慢:相对于MD5来讲,SHA算法更慢(大数据量下)。
2、碰撞:虽然已经主流使用了SHA-2算法,可以返回256位甚至512位结果,结果返回足够大,目前够用,但依旧是有限的结果,后续还是可能出现碰撞。
缺点解决方案
对于加密速度慢的缺点,小段信息比如普通的表单、密码等的加密时间几乎可以忽略不计,可以忽略这个缺点,若有大文件加密且速度慢建议用MD5。
对于碰撞问题或字典解密问题可以采用加盐解决,即使碰撞了。
使用场景
1、密码加密:对于用户的密码,肯定不希望被别人破解,一般会采用不可逆算法,原文也小,可以使用SHA-2算法加密。
2、信息签名:SHA和MD5一样对原文敏感,对于数据或文件的传输,可在传输前后都生成SHA密文来对比校验,来验证数据或文件是否损坏或修改。
目前一些比特币和CA证书就是使用SHA-256加密的。
版权归原作者 时间在手上,需要抓住 所有, 如有侵权,请联系我们删除。