首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 安全技术 > 服务器安全 >

信息安全——MD5的兑现

2013-09-05 
信息安全——MD5的实现1.问题描述MD5以512比特一块的方式处理输入的消息文本,每个块又划分为十六个32比特的

信息安全——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

称它们为链接变量。

①  接着进行算法的主循环,循环的次数是消息中512比特的块的数目。

将上面四个变量复制到另外的变量中:A到AA,B到BB,C到CC,D到DD。

主循环有四轮, 每一轮由16次操作组成。F、G、H、I函数,FF、GG、HH、II四种操作详见教材各密码学参考书。所有这些步骤进行完之后,将A、B、C、D分别加上AA、BB、CC、DD,然后用下一块数据继续进行算法。

③最后的输出是A、B、C、D的级联。

2.基本要求

   以MD5(x)的形式实现,x为01串。

3. 实现提示

注意消息文本、各种变量的类型及其类型转换。

可以参考这里:www.cnblogs.com/fullsail/archive/2013/02/22/2921505.html


代码如下:

md5.h

#include "md5.h"#include <iostream>#include <string>using namespace std;int main(){string str;cout << "Please enter the data:" << endl;cin >> str;unsigned char result[16] ={0}; md5((unsigned char*)str.c_str(), str.length(), result);cout << "MD5 is ";for (int j = 0; j < 16; j++)printf ("%02X", result[j]);cout << "."<< endl;    system ("pause");return 0;}


热点排行