实验三MD算法方案与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验三MD5算法的设计与实现

MD5 算法及C++ 实现

一、理论部分

1 、预备知识1.1 什么是数据校验通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数

据计算出的一个校验值。接收方用同样的算法计算一次校验值,如

果和随数据提供的校验值一样,就说明数据是完整的。

1.2 最简单的检验实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最准确的。同时也是效率最低的

适用范围:简单的数据量极小的通讯。应用例子:龙珠cpu在线调试工具bbug.exe。它和龙珠cpu间通讯时,bbug发送一个字节cpu返回收到的字节,bbug确认是刚才发送字节后才继续发送下一个字节的。

1.3奇偶校验Parity Check 实现方法:在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。校验位可以通过数据位异或计算出来。

应用例子:单片机串口通讯有一模式就是8位数据通讯,另加第9位

用于放校验值。

1.4bcc 异或校验法(block check character〉实现方法:很多基于串口的通讯都用这种既简单又相当准确的方

法。它就是把所有数据都和一个指定的初始值 <通常是0)异或一 次, 最后的结果就是校验值, 通常 把她附在通讯数据的最后一起发送出去。接收方收到数据后自己也 计算一次异或和校验值, 如果和收到的校验值 致就说明收到的数

据 是 宀

校 验

值 计 算 的

码 类 似 于

un sig ned

uCRC=0 。

//

始 值 for(i nt

i=0

。 ivDataLe nth

i++>

uCRC A

=Data[i]

。 适用范 围: 适用 于大多 数 要 求不 高的数据通讯

应用例子:

ic 卡接口通讯、很多单片机系统的串口通讯都使用。

1.5 crc

循 环冗 余校 验 (Cyclic

Redundancy Check 〉

实现方法:这是利用除法及余数的原理来进行错误检测的 .将接收到 的 码 组 进 行 除 法 运 算 ,如果除尽,贝朋明传输无误;如果未除尽,贝y 表明传输出现差 错

crc

校 验

具 还 有 自 动 纠 错 能 力。 crc 检验主要有计算法和查表法两种方法,网上很多实现代码。

适用范围:CRC-12码通常用来传送6-bit 字符串。CRC-16及CRC-

CCITT 码 则 用 是 来 传 送 8-bit 字符。CRC-32 :硬盘数据,网络传输等

应用例子:rar,以太网卡芯片、MPEG 解码芯片中

1.6 md5 校 验 和 数

实现方法:主要有 md5和

适用范围:数据比较大或要求比较高的场合。如 据、文件校验,des 用于保密数据的校验 < 数字签名)等等

应用例子:文件校验、银行系统的交易数据

2 、 具 体 的 实 现 理 论 2.1

MD5算法是 MD4算法的改进算法。Ron Rivest 于1990年提出 MD4

单向散列函数,MD 表示消息摘要(Message Digest 〉,对输入消息, 算法产生128位散列值。该算法首次公布之后,

Bert den Boer 和

An toon Bosselaers 对算法三轮中的后两轮进行了成功的密码分析。 在一个

不相关的分析结果中,Ralph MerKle 成功地攻击了前两轮。尽 管这些攻击都没有扩展到整个算法,但 Rivest 还是改进了其算法, 结 果 就 是

MD5 算 法 。

MD5算法是MD4的改进算法,它比MD4更复杂,但设计思想相似, 输入的消

息可任意长,输出结果也仍为128位,特别适用于高速软件 实现,是基于

32-位操作数的一些简单的位操作。 2.2

算 法

步 骤

l 将输入消息按512-位分组,最后要填充成为512位的整数倍,且最 后一

组的后64位用来填充消息长度(填充前 >。填充方法为附一个1 在消息后,后接所要求的多个0。这样可以确保不同消息在填充后不 相 同

字 签 名

des 算法

md5用于大量数

l由于留出64位用来表示消息长度,那么消息的长度最多可达264字节,相当于4GMG字节,文件的长度是不可能达到这么大,因此通常都是只采用64位中的低32位来表示消息长度,高32位填充0。

I初始化MD变量。由于每轮输出128位,这128位可用下面四个32 位字A,B,C,D 来表示。其初始值设为:A=0x01234567

B=0x89ABCDEF

C=0xFEDCBA98

D=0x76543210

I开始进入算法主循环,循环的次数是消息中512位消息分组的数目。先将上面A、B、C、D四个变量分别复制到另外四个变量a、b、c、d中去。主循环有四轮,每轮很相似。每轮进行16次操作,每次操作对a、b、c、d四个变量中的三个作一次非线性函数运算,然后将所得结果加上第四个变量,消息的一个子分组和一个常数。再将所得结果向右环移一个不定的数,并加上a,b,c或d中之一。最

后用该结果取代a,b,c 或 d 中之一。以下是每次操作中用到的四个非线性函数< 每轮一个)。

F(X,YZ>=(X A Y> V (( X> A Z>

G(X,YZ>=(X A Z> V (Y A ( Z>> H(X,Y,Z>=X ㊉Y ㊉Z

I(X,Y,Z>=Y ㊉(X V ( Z>> 其中,㊉是异或,A是与,V是或,是反符号。

相关文档
最新文档