SHA-1算法概述:SHA-1算法由美国国家标准和技术协会(NIST)与美国国家安全局(NSA)设计,并且被美国政府采纳,成为美国国家标准。事实上SHA-1目前是全世界使用最为广泛的哈希算法可以对长度不超过2^64位(bit)的消息进行计算,输入以512位(bit)数据块为单位处理,产生160位(bit)的消息摘要作为输出。SHA-1变换消息摘要输入输出小于2^64bit160bit实现过程:该算法的处理流程大致分为5个步骤:步骤1:补位,补长度。步骤2:将步骤2得到的消息M以512bit分组,每组分成16个字。步骤3:将16个字扩充至80个字。步骤4:进行散列函数的计算准备工作:把原始消息(如字符串、文件等)转换成bit序列。“abc”011000010110001001100011原始消息bit序列转换‘a’=0x61‘b’=0x62‘c’=0x63步骤1:补位。最高位补1,其余补0,使得数据位总长度对512取余的结果为448。011000010110001001100011原始序列补位后序列01100001011000100110001110000000000……0000000000024位补1位1,补423位0448位步骤1:补位。最高位补1,其余补0,使得数据位总长度对512取余的结果为448。原始序列24位011000010110001001100011110000000···00000000000填充后0110000101100010011000111(512-24-1-64)个0步骤1:补位。最高位补1,其余补0,使得数据位总长度对512取余的结果为448。6162638000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000补位后的序列转换成16进制步骤1:补长度。将原始数据的长度补到补位操作后的消息后面。61626380000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018补位后的序列转换成16进制步骤2:将步骤1得到的消息M以512bit分组,每组分成16个字。10/18M=M1||M2||…||Mi||…||Mn512bit512bit512bit512bit616263800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018M1例步骤2:将步骤1得到的消息M以512bit分组,每组分成16个字(1)将Mi分成16个字W0,W1,…,W1511/18M1=61626380000000000000000000000000W0W1W2W300000000000000000000000000000000W4W5W6W700000000000000000000000000000000W8W9W10W1100000000000000000000000000000018W12W13W14W15步骤3:对于Mi进行以下处理(1)将16个字扩充至80个字,扩展W16,W17,…,W79Wt=S1(Wt-3⊕Wt-8⊕Wt-14⊕Wt-16)(0≤t≤19)St(W)将W循环左移t位步骤4:进行散列函数的计算,SHA-1算法的核心共4轮,每轮20步,共80步。(1)初始化MD缓冲区{Hi},160bit(5个32的寄存器)。A=H0=0x67452301B=H1=0xEFCDAB89C=H2=0x98BADCFED=H3=0x10325476E=H4=0xC3D2E1F0步骤5:进行散列函数的计算,SHA-1算法的核心共4轮,每轮20步,共80步。(1)更新缓存ABCDE的内容,缓存ABCDE的初始值为:A=H0B=H1C=H2D=H3E=H4步骤5:进行散列函数的计算,SHA-1算法的核心共4轮,每轮20步,共80步。(2)共4轮,每轮的常数K为:Kt=5A827999(0≤t≤19)Kt=6ED9EBA1(20≤t≤39)Kt=8F1BBCDC(40≤t≤59)Kt=CA62C1D6(60≤t≤79)512bits/32=16words扩展至W[80]字每1/4用20字步骤5:进行散列函数的计算,SHA-1算法的核心共4轮,每轮20步,共80步。步骤5:进行散列函数的计算,SHA-1算法的核心共4轮,每轮20步,共80步。(3)对于0≤t≤19,执行以下循环:TEMP=S5(A)+ft(B,C,D)+E+Wt+Ktft(B,C,D)=(B∧C)∨((¬B)∧D)(0≤t≤19)步骤5:对于Mi进行以下处理(4)对于0≤t≤79,执行以下循环:TEMP=S5(A)+ft(B,C,D)+E+Wt+KtB=A,C=(B30),D=C,E=D步骤5:对于Mi进行以下处理(4)对于0≤t≤79,执行以下循环:TEMP=S5(A)+ft(B,C,D)+E+Wt+KtE=D;D=C;C=S30(B);B=A;A=TMP步骤5:对于Mi进行以下处理(5)对于0≤t≤79,执行以下循环:TEMP=S5(A)+ft(B,C,D)+E+Wt+KtKt=5A827999(0≤t≤19)步骤5:对于Mi进行以下处理(6)上一步循环执行完成后,令H0=H0+AH1=H1+BH2=H2+CH3=H3+DH4=H4+E步骤6:重复步骤5,对消息块M1…Mn(0=n=15)进行处理。处理完所有的Mn后,得到第一轮的消息摘要(共160位)H0H1H2H3H4TEMP=S5(A)+ft(B,C,D)+E+Wt+KtE=D;D=C;C=S30(B);B=A;A=TMP•ThankYou!