MD5实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一、MD5算法描述MD5算法是计算机安全领域广泛使用的一种散列算法之一,用以提供消息的完整性保护。本次实验中,对于输入的任意长度的一段数据,输出唯一固定的128位MD5散列值。MD5算法分为以下步骤:1、初始化(填充)首先对于任意长度的消息,将其按照512位进行分组,为保证每个分组都是512位,需要对消息进行填充。填充方法是先在消息末尾填一个1,再在后面填若干个0,使其长度l恰好满足=448(mod512)l,然后在其后附加上64位的(填充前)消息长度,确保不同的消息在填充后不相同消息在填充后不相同。其次将每个分组512位的数据划分为16个32位的子分组,在实现过程中,将其表示为16个32位整数进行运算。初始化四个32位链接变量为:=A0x67452301=B0xefcdab89=C0x98badcfe=D0x103254762、单步操作与主循环MD5共分为4轮,每轮进行16步单步操作,MD5的单步操作如下图其中,(0,1,2,3)kgk是每次运算中用到的非线性函数(每轮一个),用C语言定义如下数据块X[(i)]k来自于初始化中分好的16个32位数据分组,根据循环步数按以下置换函数选取(i表示循环的第i步)Ti是一些随机数序列,Ti的值如下(按顺序选取)iS表示循环左移iS位,iS的数值如下(按顺序选取)因此,MD5主要的一个单步操作可以表示为(((,,)[][()])[])kabafbcdTiXiSi每轮16步结束后的4个32位数作为下一轮的输入继续循环。四轮结束后的输入再加上初始值即得到最终结果128位的散列值。64步主循环如下图二、程序验证为了验证程序的正确性,我们通过查找Wikipedia上使用的3个测试向量来进行测试,测试向量如下:运行程序,得到的结果如下:可以看到,实验结果与测试向量相同,验证了程序的正确性。三、效率测试为了测试程序的效率,我们调用了C语言中time.h中的clock()函数来记录主程序之间CPU时钟计时单元数,并用这个数据除以CLOCKS_PER_SE换算出程序实际运行的时间,从而计算出程序的实际效率。对于较小的文件,我们计算几组不同的文件的MD5值,再求平均值得到程序的加密效率,结果如下:可以看出,程序实际用的时间分别为0.015秒,0.252秒,0.032秒结合文件长度,计算出效率分别0.1226GB/s,0.1322GB/s,0.1299GB/s求得一个平均的值为0.1282GB/s.对于较大的文件,测试如下:计算可得加密速度为0.058GB/s.通过比较可以看出,对于较大的文件,加密速度更慢,效率更低一点。

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功