早教吧 育儿知识 作业答案 考试题库 百科 知识分享

MD5的实现1.问题描述MD5以512比特一块的方式处理输入的消息文本,每个块又划分为十六个32比特的子块。算法的输出由四个32比特的块组成,将它们级联成一个128比特的Hash值。①首先填充

题目详情
MD5的实现
1.问题描述
MD5以512比特一块的方式处理输入的消息文本,每个块又划分为十六个32比特的子块。算法的输出由四个32比特的块组成,将它们级联成一个128比特的Hash值。
①首先填充消息使填充后的长度恰好为一个比512的倍数小64的数。填充方法是附一个“1”在消息后面,再补多个“0”。然后,在其后附上64比特的消息长度(填充前)的二进制表示。算法中使用了四个32比特的变量A、B、C、D,先把这四个变量初始化为:
A=01234567,B=89ABCDEF,C=FEDCBA98,D=76543210
称它们为链接变量。
3 接着进行算法的主循环,循环的次数是消息中512比特的块的数目。
将上面四个变量复制到另外的变量中:A到AA,B到BB,C到CC,D到DD。
主循环有四轮, 每一轮由16次操作组成。F、G、H、I函数,FF、GG、HH、II四种操作详见教材P116-P118。所有这些步骤进行完之后,将A、B、C、D分别加上AA、BB、CC、DD,然后用下一块数据继续进行算法。
③最后的输出是A、B、C、D的级联。
2.基本要求
以MD5(x)的形式实现,x为01串。
3. 实现提示
注意消息文本、各种变量的类型及其类型转换。














▼优质解答
答案和解析
如下代码是md5的一个简单实现,md5_encode函数接收一个文件名,计算该文件的16进制的md5值,要改成你的需求,只需输入输出改一下即可,函数最后计算出的A、B、C、D既是要求的值,要注意的是,这里为了简便,利用了硬...