- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MD5消息摘要算法实现及改进
图 1 MD5 消息摘要算法传统运算流程
图 2 改进后的 MD5 算法流程
2012-07-19################2012刘-俊0辉7-19######2#0#12-07-19########
( 中国工商银行泉州市分行
福建 泉州
362000 )
【摘 要】: MD5 消息摘要算法通过对一个任意长度的消息进行处理产生一个固定长度的 消息摘要 , 可利用该 消息摘
要 进行数字签名和密码加密。本文在传统算法流程的基础上作了进一步的改进, 提高了该算法的运算效率。
【关键字】:
MD5 算法, 消息摘要, 实现与改进
1. MD5 算法简介
MD5 消息摘要算法由麻省理工学院( MIT) 计算机科学实验 室的 R.Rivest 提出, 被互 联 网 电 子 邮 件 保 密 协 议 ( PEM) 指 定 为
消息压缩值算法之一, 用于数字签名前对消息进行安全的压缩;
且为不可逆算法。
2. MD5 算法描述
MD5 算法是以任意长度的消息作为输入, 输出一个长度固 定为 128bit 的消息摘要, 其传统运算流程见图 1。
MD5Operation(M, Context); End;
3.1 参数的定义与初始化
鉴于对 MD5 算法的运算流程做了改进。因此, 有必要先对 运算中所用到的一系列参数进行数据结构的定义和初始化。
3.1.1 定义参数
我们定义一个名为 MD5Content 的数据类型。
MD5Content = Record ChaVar:MD5ChaVar; Len: MD5Len;
Buffer: MD5Buffer;
End;
其中,
MD5ChaVar 为含有 4 个元素的 DWORD 数组,
分别
表示四个链接变量; MD5Len 由 2 个 DWORD 元素组成, 共 64
位, 用于存放消息长度; MD5Buffer 为含有 64 个元素的 BYTE 数 组, 共 512 位, 存放当前待处理的报文分组内容。
3.1.2 初始化参数
MD5ParaReady 函数用于初始化所有的参数, 它包含了传统 流程中附加填充比特、附加消息长度和初始化 MD 缓存区三个
步骤中的部分操作。关键代码如下:
Procedure MD5ParaReady(Var Context: MD5Content) Begin
With Context do
Begin
//对链接变量赋值,
InitChaVar($efcdab89, $98badcfe, ;
//初始化 64 位的消息长度
Len[0] := 0; Len[1] := 0;
// 将分组存储区的内容全部清零
ZeroMemory(@Buffer, SizeOf(MD5Buffer)); End;
End;
3.2 划分、处理报文分组
MD5Operation 函数主要根据消息长度的不同进行报文分组 的划分和逻辑处理。伪代码如下:
MD5Operation(M:String; Context:MD5Content);//M 为初始消息
Begin
// ①②两种情况
If Length(M)=64 then
Begin
PreTreatment(M, Context); HYPERLINK mailto:GroupDisposal(@Context.Buffer GroupDisposal(@Context.Buffer, Context.ChaVar); End;
// ③④两种情况
Else
Begin
CycleDisposal(M, Context); PreTreatment(M, Context);
HYPERLINK mailto:GroupDisposal(@Context.Buffer GroupDisposal(@Context.Buffer, Context.ChaVar); End;
//输出消息摘要
GetMD();
3. MD5 算法实现及改进
由图 1 可知,
传统的算法运算流程是先对初始消息进行预
处理( 使其长度变为 512bit 的整数倍) , 再进行报文分组的划分
和逻辑处理。而本文对此作了改进, 具体流程如图 2 所示。首先 根据初始消息长度的不同将其分为: ①初始长度≤512bit, 且初 始长 度≤448bit; ②初 始 长 度≤512bit, 且 448bit初 始 长 度≤
512bit; ③初始长度512bit, 且剩余消息( 初始消息在划分、处理 完所有满足分组条件后的剩余部分) 的长度≤448bit; ④初始长 度512bit, 且 448bit剩余消息长度≤512bit 四种情况。若为①
②初始消息的长度小于
文档评论(0)