SHA1 算法原理1 SHA1 算法简介安全哈希算法( Secure HashAlgorithm)主要适用于数字签名标准(Digital Signature StandardDSS)里面定义的数字签名算法(Digital Signature AlgorithmDSA)。对于长度小于 2^64 位的消息,SHA1 会产生一个 160 位的消息摘要。 当接收到消息的时候, 这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。SHA1 有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。2 术语和概念2.1 位(Bit),字节( Byte)和字( Word )SHA1 始终把消息当成一个位 (bit)字符串来处理。 本文中,一个“字”(Word)是 32 位,而一个“字节”(Byte)是 8 位。比如,字符串“abc”可以被转换成一个位字符串: 01100001 0110001001100011。它也可以被表示成 16 进制字符串 : 0x616263. 2.2 运算符和符号下面的逻辑运算符都被运用于“字” (Word)X^Y = X , Y 逻辑与X \/ Y = X , Y 逻辑或X XOR Y= X , Y 逻辑异或~X = X 逻辑取反X+Y 定义如下:字 X 和 Y 代表两个整数x 和 y, 其中 0 <= x < 2^32 且 0 <= y < 2^32. 令整数 z = (x + y) mod 2^32. 这时候 0 <= z <2^32. 将 z 转换成字 Z, 那么就是Z = X + Y. 循环左移位操作符Sn(X)。X 是一个字,n 是一个整数,0<=n<=32。Sn(X) = (X<>32-n) X<>n 是抛弃右边的 n 位,将各个位依次向右移动n 位,然后在左边的 n 位填0。因此可以叫 Sn(X)位循环移位运算3 SHA1 算法描述在 SHA1 算法中,我们必须把原始消息(字符串,文件等)转换成位字符串。SHA1 算法只接受位作为输入。 假设我们对字符串 “abc”产生消息摘要。首先,我们将它转换成位字符串如下:01100001 01100010 01100011 ―――――――――――――‘a’=97 ‘b’=98 ‘c’=99 这个位字符串的长度为24。下面我们需要 5 个步骤来计算 MD5。3.1 补位消息必须进行补位,以使其长度在对512 取模以后的余数是448。也就是说,(补位后的消息长度) %512 = 448。即使长度已经满足对512 取模后余数是 448,补位也必须要进行。补位是这样进行的:先补一个...