实验三MD算法方案与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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是或,是反符号。