Hash算法的设计与实现(基础)Word文档格式.doc

上传人:b****1 文档编号:13065223 上传时间:2022-10-04 格式:DOC 页数:14 大小:112KB
下载 相关 举报
Hash算法的设计与实现(基础)Word文档格式.doc_第1页
第1页 / 共14页
Hash算法的设计与实现(基础)Word文档格式.doc_第2页
第2页 / 共14页
Hash算法的设计与实现(基础)Word文档格式.doc_第3页
第3页 / 共14页
Hash算法的设计与实现(基础)Word文档格式.doc_第4页
第4页 / 共14页
Hash算法的设计与实现(基础)Word文档格式.doc_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Hash算法的设计与实现(基础)Word文档格式.doc

《Hash算法的设计与实现(基础)Word文档格式.doc》由会员分享,可在线阅读,更多相关《Hash算法的设计与实现(基础)Word文档格式.doc(14页珍藏版)》请在冰豆网上搜索。

Hash算法的设计与实现(基础)Word文档格式.doc

AnyPersoanlComputer

说明:

本程序的编译软件环境由Win8.1Pro中的VS2013通过,硬件平台由MacBookProWithRetina通过,在其他软件/硬件平台上未经过严格的测试,可能存在细微的差别。

四、原理

MD5:

对MD5算法简要的叙述可以为:

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

第一步填充:

如果输入信息的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。

填充的方法是填充一个1和n个0。

填充完后,信息的长度就为N*512+448(bit)。

第二步记录信息长度:

用64位来存储填充前信息长度。

这64位加在第一步结果的后面,这样信息长度就变为N*512+448+64=(N+1)*512位。

第三步装入标准的幻数(四个整数):

标准的幻数(物理顺序)是(A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16)。

如果在程序中定义应该是(A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L)。

第四步四轮循环运算:

循环的次数是分组的个数(N+1) 

1)将每一512字节细分成16个小组,每个小组64位(8个字节)

2)先认识四个线性函数(&

是与,|是或,~是非,^是异或)

F(X,Y,Z)=(X&

Y)|((~X)&

Z)

G(X,Y,Z)=(X&

Z)|(Y&

(~Z))

H(X,Y,Z)=X^Y^Z

I(X,Y,Z)=Y^(X|(~Z))

3)设Mj表示消息的第j个子分组(从0到15),<

<

s表示循环左移s位,则四种操作为:

FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)<

s)

GG(a,b,c,d,Mj,s,ti)表示a=b+((a+G(b,c,d)+Mj+ti)<

HH(a,b,c,d,Mj,s,ti)表示a=b+((a+H(b,c,d)+Mj+ti)<

II(a,b,c,d,Mj,s,ti)表示a=b+((a+I(b,c,d)+Mj+ti)<

4)四轮运算

第一轮

FF(a,b,c,d,M0,7,0xd76aa478)

FF(d,a,b,c,M1,12,0xe8c7b756)

FF(c,d,a,b,M2,17,0x242070db)

FF(b,c,d,a,M3,22,0xc1bdceee)

FF(a,b,c,d,M4,7,0xf57c0faf)

FF(d,a,b,c,M5,12,0x4787c62a)

FF(c,d,a,b,M6,17,0xa8304613)

FF(b,c,d,a,M7,22,0xfd469501)

FF(a,b,c,d,M8,7,0x698098d8)

FF(d,a,b,c,M9,12,0x8b44f7af)

FF(c,d,a,b,M10,17,0xffff5bb1)

FF(b,c,d,a,M11,22,0x895cd7be)

FF(a,b,c,d,M12,7,0x6b901122)

FF(d,a,b,c,M13,12,0xfd987193)

FF(c,d,a,b,M14,17,0xa679438e)

FF(b,c,d,a,M15,22,0x49b40821)

第二轮

GG(a,b,c,d,M1,5,0xf61e2562)

GG(d,a,b,c,M6,9,0xc040b340)

GG(c,d,a,b,M11,14,0x265e5a51)

GG(b,c,d,a,M0,20,0xe9b6c7aa)

GG(a,b,c,d,M5,5,0xd62f105d)

GG(d,a,b,c,M10,9,0x02441453)

GG(c,d,a,b,M15,14,0xd8a1e681)

GG(b,c,d,a,M4,20,0xe7d3fbc8)

GG(a,b,c,d,M9,5,0x21e1cde6)

GG(d,a,b,c,M14,9,0xc33707d6)

GG(c,d,a,b,M3,14,0xf4d50d87)

GG(b,c,d,a,M8,20,0x455a14ed)

GG(a,b,c,d,M13,5,0xa9e3e905)

GG(d,a,b,c,M2,9,0xfcefa3f8)

GG(c,d,a,b,M7,14,0x676f02d9)

GG(b,c,d,a,M12,20,0x8d2a4c8a)

第三轮

HH(a,b,c,d,M5,4,0xfffa3942)

HH(d,a,b,c,M8,11,0x8771f681)

HH(c,d,a,b,M11,16,0x6d9d6122)

HH(b,c,d,a,M14,23,0xfde5380c)

HH(a,b,c,d,M1,4,0xa4beea44)

HH(d,a,b,c,M4,11,0x4bdecfa9)

HH(c,d,a,b,M7,16,0xf6bb4b60)

HH(b,c,d,a,M10,23,0xbebfbc70)

HH(a,b,c,d,M13,4,0x289b7ec6)

HH(d,a,b,c,M0,11,0xeaa127fa)

HH(c,d,a,b,M3,16,0xd4ef3085)

HH(b,c,d,a,M6,23,0x04881d05)

HH(a,b,c,d,M9,4,0xd9d4d039)

HH(d,a,b,c,M12,11,0xe6db99e5)

HH(c,d,a,b,M15,16,0x1fa27cf8)

HH(b,c,d,a,M2,23,0xc4ac5665)

第四轮

Ⅱ(a,b,c,d,M0,6,0xf4292244)

Ⅱ(d,a,b,c,M7,10,0x432aff97)

Ⅱ(c,d,a,b,M14,15,0xab9423a7)

Ⅱ(b,c,d,a,M5,21,0xfc93a039)

Ⅱ(a,b,c,d,M12,6,0x655b59c3)

Ⅱ(d,a,b,c,M3,10,0x8f0ccc92)

Ⅱ(c,d,a,b,M10,15,0xffeff47d)

Ⅱ(b,c,d,a,M1,21,0x85845dd1)

Ⅱ(a,b,c,d,M8,6,0x6fa87e4f)

Ⅱ(d,a,b,c,M15,10,0xfe2ce6e0)

Ⅱ(c,d,a,b,M6,15,0xa3014314)

Ⅱ(b,c,d,a,M13,21,0x4e0811a1)

Ⅱ(a,b,c,d,M4,6,0xf7537e82)

Ⅱ(d,a,b,c,M11,10,0xbd3af235)

Ⅱ(c,d,a,b,M2,15,0x2ad7d2bb)

Ⅱ(b,c,d,a,M9,21,0xeb86d391)

5)所有这些完成之后,将A、B、C、D分别加上a、b、c、d。

然后用下一分组数据继续运行算法,最后的输出是A、B、C和D的级联。

SHA1:

在SHA1算法中,我们必须把原始消息(字符串,文件等)转换成位字符串。

SHA1算法只接受位作为输入。

假设我们对字符串“abc”产生消息摘要。

首先,我们将它转换成位字符串如下:

011000010110001001100011

―――――――――――――

‘a’=97 

 

‘b’=98 

‘c’=99

第一步补位:

消息必须进行补位,以使其长度在对512取模以后的余数是448。

也就是说,(补位后的消息长度)%512=448。

即使长度已经满足对512取模后余数是448,补位也必须要进行。

补位是这样进行的:

先补一个1,然后再补0,直到长度满足对512取模后余数是448。

总而言之,补位是至少补一位,最多补512位。

还是以前面的“abc”为例显示补位的过程。

原始信息:

补位第一步:

0110000101100010011000111(补一个“1”)

补位第二步:

01100001011000100110001110…..0(补423个“0”)

我们可以把最后补位完成后的数据用16进制写成下面的样子

61626380000000000000000000000000

00000000000000000000000000000000

0000000000000000

现在,数据的长度是448了,我们可以进行下一步操作。

第二步补长度:

所谓的补长度是将原始数据的长度补到已经进行了补位操作的消息后面。

通常用一个64位的数据来表示原始消息的长度。

如果消息长度不大于2^64,那么第一个字就是0。

在进行了补长度的操作以后,整个消息就变成下面这样了(16进制格式)

00000000000000000000000000000018

如果原始的消息长度超过了512,我们需要将它补成512的倍数。

然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要。

第三步使用的常量:

一系列的常量字K(0),K

(1),...,K(79),如果以16进制给出。

它们如下:

Kt 

=0x5A827999 

(0<

=t<

=19)

=0x6ED9EBA1(20<

=39)

=0x8F1BBCDC(40<

=59)

=0xCA62C1D6(60<

=79).

第四步

1)需要使用的函数:

在SHA1中我们需要一系列的函数。

每个函数ft 

(0<

=79)都操作32位字B,C,D并且产生32位字作为输出。

ft(B,C,D)可以如下定义

ft(B,C,D)=(BANDC)or((NOTB)ANDD)(0<

ft(B,C,D)=BXORCXORD 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 中考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1