- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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 ”
可以被转换成一个位字符串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) = (Xn)OR(X32-n)
Xn 定义如下:抛弃最左边的n 位数字,将各个位依次向左移
动n 位,然后用0 填补右边的n 位(最后结果还是32 位)。Xn 是
抛弃右边的n 位,将各个位依次向右移动n 位,然后在左边的n 位填
0 。因此可以叫Sn(X)位循环移位运算
3 SHA1 算法描述
在SHA1 算法中,我们必须把原始消息(字符串,文件等)转换
成位字符串。SHA1 算法只接受位作为输入。假设我们对字符串“abc ”
产生消息摘要。首先,我们将它转换成位字符串如下:
01100010
―――――――――――――
‘a ’=97 ‘’=98 ‘c ’=99
这个位字符串的长度为24 。下面我们需要5 个步骤来计算MD5 。
3.1 补位
消息必须进行补位,以使其长度在对512 取模以后的余数是448 。
也就是说,(补位后的消息长度)%512 = 448。即使长度已经满足对
512 取模后余数是448 ,补位也必须要进行。
补位是这样进行的:先补一个1,然后再补0 ,直到长度满足对
512 取模后余数是448 。总而言之,补位是至少补一位,最多补512
位。还是以前面的“abc ”为例显示补位的过程。
原始信息:01100010
补位第一步011000101
首先补一个“1”
补位第二步0110001010…..0
然后补423 个“0 ”
我们可以把最后补位完成后的数据用16 进制写成下面的样子
0000000000000000
0000000000000000
0000000000000000
00000000
现在,数据的长度是448 了,我们可以进行下一步操作。
3.2 补长度
所谓的补长度是将原始数据的长度补到已经进行了补位操作的消
息后面。通常用一个64 位的数据来表示原始消息的长度。如果消息
长度不大于2^64,那么第一个字就是0 。在进行了补长度的操作以后,
整个消息就变成下面这样了(16 进制格式)
文档评论(0)