我们常见的Hash函数有MD4、MD5、SHA等,在这里小编想要把SHA单独拿出来进行一个基础的讲解,其他的几种小编就不在这里展开来讲了,如果大家也想要了解SHA算法的相关内容,可以跟着小编来一起看看,学习一下哦。
由美国标准与技术研究所(NIST)设计的安全SHA算法是1993年公布的国家标准FIPS PUB 180,并在1995 年又公布了FIPS PUB 180-1,通常称之为SHA-1。这是一种安全散列算法,它的设计在很大的程度上是模仿MD4的,到现在已经成为了公认最安全的散列算法之一,被广泛使用起来。
SHA-1的其输入为长度小于264位的报文,输出为160位的报文摘要,该算法对输入按512位进行分组,并以分组为单位进行处理。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。
它的算法基本步骤为:
1、将消息摘要转换成位字符串
由于在Sha-1算法中的输入必须为位,因此我们第一步要做的就是把它转化成位字符串,以“abc”字符串举例来说明问题,因为'a'=97, 'b'=98,'c'=99,所以将其转换为位串后为:
01100001 01100010 01100011
2、对转换后的位字符串进行补位操作
在Sha-1算法标准有必须对消息摘要进行补位操作的规定,对将要输入的数据进行填充之后会使得数据长度对512求余的结果为448,在比特位的最高位填充补一个1,其它的位补0,补位之前如果已经满足对512取模余数为448,也需要进行补位,只是在其后补一位1就可以了。不管如何,补位是一定要的,最少补一位,最多补512位,依旧以“abc”为例,其补位过程如下:
初始的信息摘要:01100001 01100010 01100011
第一步补位: 01100001 01100010 01100011 1
..... ......
补位最后一位: 01100001 01100010 01100011 10.......0(后面补了423个0)
之后我们将补位操作后的信息摘要转换为十六进制,如下所示:
61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000
3、附加长度值
在信息摘要后面附加64bit的信息,用来表示原始信息摘要的长度,在这步操作之后,信息报文便是512bit的倍数。通常来说用一个64位的数据表示原始消息的长度,如果消息长度不大于2^64,那么前32bit就为0,在进行附加长度值操作后,其“abc”数据报文即变成如下形式:
61626380 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000018
由于“abc”占3个字节,即24位 ,换算成十六进制就是0x18。
4、初始化缓存
一个160位MD缓冲区用以保存中间和最终散列函数的结果。它可以表示为5个32位的寄存器(H0,H1,H2,H3,H4)。初始化为:
H0=0x67452301
H1=0xEFCDAB89
H2=0x98BADCFE
H3=0x10325476
H4=0xC3D2E1F0
如果大家对MD-5不陌生的话,会发现一个重要的现象,其前四个与MD-5一样,但不同之处为存储为big-endien format.
5、计算消息摘要
在计算报文之前我们还要做一些基本的工作,就是在我们计算过程中要用到的方法,或定义。
(1)、循环左移操作符Sn(x),x是一个字,也就是32bit大小的变量,n是一个整数且0<=n<=32。Sn(X) = (X<>32-n)
(2)、在程序中所要用到的常量,这一系列常量字k0、k1、...k79,将其以十六进制表示如下:
Kt=0x5A827999(0<=t<=19)
Kt=0x6ED9EBA1(20<=t<=39)
Kt=0x8F1BBCDC(40<=t<=59)
Kt=0xCA62C1D6(60<=t<=79)
(3)、所要用到的一系列函数
Ft(b,c,d)((b&c)|((~b)&d))(0<=t<=19)
Ft(b,c,d)(b^c^d) (20<=t<=39)
Ft(b,c,d)((b&c)|(b&d)|(c&d)) (40 <= t <= 59)
Ft(b,c,d)(b^c^d) (60<=t<=79)
(4)、计算
计算需要一个缓冲区,由5个32位的字组成,还需要一个80个32位字的缓冲区。第一个5个字的缓冲区被标识为A,B,C,D,E。80个字的缓冲区被标识为W0,W1,...,W79
另外还需要一个一个字的TEMP缓冲区。
为了产生消息摘要,在第4部分中定义的16个字的数据块M1,M2,...,Mn
会依次进行处理,处理每个数据块Mi包含80个步骤。
现在开始处理M1,M2,...,Mn。为了处理 Mi,需要进行下面的步骤
a). 将Mi分成16个字W0,W1,...,W15,W0是最左边的字
b). 对于t=16到79,令Wt=S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16).
c). 令 A=H0, B=H1, C=H2, D=H3, E=H4.
d). 对于t=0到79,执行下面的循环
TEMP=S5(A)+ft(B,C,D)+E+Wt+Kt;
E=D;D=C;C = S30(B);B=A;A=TEMP;
e). 令H0=H0 +A, H1=H1+B, H2=H2+C, H3=H3+D, H4=H4 +E.
在处理完所有的 Mn, 后,消息摘要是一个160位的字符串,以下面的顺序标识
H0 H1 H2 H3 H4.
SHA-1与MD5的比较
SHA-1与MD5均由MD4导出,因此SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但是还是有几点不同的,如以下
①对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
②对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
③速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
在2002年,NIST分别发布了SHA-256、SHA-384、SHA-512,这些算法统称SHA-2。2008年又新增了SHA-224。2005年,密码学家就证明SHA-1的破解速度比预期提高了2000倍,虽然破解仍然是极其困难和昂贵的,但随着计算机变得越来越快和越来越廉价,SHA-1算法的安全性也逐年降低,已被密码学家严重质疑,希望由安全强度更高的SHA-2替代它,目前SHA-2各版本已成为主流。
各个SHA的参数如下表:
SHA算法主要适用于数字签名标准里面定义的数字签名算法,是一种数据加密算法,具有较高的安全性。SHA算法的讲解小编就讲到这里了,想要好好学习了解的伙伴们可以多浏览几次以加深印象。更多的学习内容可前往课课家教育进行咨询学习。
¥399.00
¥699.00
¥399.00
¥299.00