2021SC@SDUSC
本周将三大算法中最后一个未介绍的算法SHA的原理进行分析。本章就对最初的SHA-1算法原理进行简要分析。
一、SHA-1背景
SHA-1算法也称安全散列算法1,可以将一个最大2^(64)-1的数据生成一个160位的数据摘要。尽管SHA-1算法已经被认为不再安全,但仍有部分应用使用SHA-1算法验证文件。
二、类型定义
在介绍算法原理之前,有必要定义一些数据类型,有助于我们脱离具体编程语言分析这个算法。这里使用C++的定义方式。
typedef __UINT8_TYPE__ BYTE;
typedef __UINT32_TYPE__ WORD;
typedef __UINT64_TYPE__ DWORD;
上面定义了三个数据类型,分别是:
BYTE,字节,由8位二进制数组成,表示范围(0x0 - 0xFF)。
WORD,字,由32位二进制数组成,表示范围(0x0 - 0xFFFFFFFF)。
DWORD,双字,两个字组成,表示范围(0x0 - 0xFFFFFFFFFFFFFFFF)
三、算法分析
输入:不定长度的字节序列(最大为2^(64)-1位)。
输出:160位数据。
这里主要关注一下输出。SHA-1算法最终产生160位数据,这实际上由5个变量存储,每个变量存储32位信息,也就是说,这160为数据存储在5个WORD中(5* 32=160),这五个变量被定义为:A,B,C,D,E。他们都有初始值,分别为:
WORD A = 0x67452301;
WORD B = 0xEFCDAB89;
WORD C = 0x98BADCFE;
WORD D = 0x10325476;
WORD E = 0xC3D2E1F0;
SHA-1算法的过程就是利用输入的字节序列,不断更新这五个变量ÿ