预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

MD5简介MD5的全称是Message-DigestAlgorithm5(信息-摘要算法),在90年代初由MITLaboratoryforComputerScience和RSADataSecurityInc的RonaldL.Rivest开发出来,经MD2、MD3和MD4发展而来。它的作用是让大容量信息在用数字签名软件签署私人密匙前被"压缩"成一种保密的格式。MD5算法的描述和C语言源代码在InternetRFCs1321中有详细的描述(HYPERLINK"http://www.ietf.org/rfc/rfc1321.txt"http://www.ietf.org/rfc/rfc1321.txt),这是一份最权威的文档,由RonaldL.Rivest在1992年8月向IEFT提交。我们先来看看RFC文档中对MD5的描述:ThisdocumentdescribestheMD5message-digestalgorithm(摘要).Thealgorithmtakesasinputamessageofarbitrarylength(任意长度)andproducesasoutputa128-bit"fingerprint"or"messagedigest"oftheinput.Itisconjecturedthatitiscomputationallyinfeasible(不可实行的)toproducetwomessageshavingthesamemessagedigest,ortoproduceanymessagehavingagivenprespecifiedtargetmessagedigest.TheMD5algorithmisintendedfordigitalsignatureapplications,wherealargefilemustbe"compressed"inasecuremannerbeforebeingencryptedwithaprivate(secret)keyunderapublic-keycryptosystemsuchasRSA.从上面的RFC描述中,可以总结出MD5摘要算法两个最重要的特性:不可逆,无法由结果退出输入twomessages不可能拥有相同的摘要信息,保证一对一正是这两个特性保证了MD5在数字签名中的应用,将一个需要签名的大文件转换为等价的128bit的摘要信息,再用私钥对128bit的摘要信息进行加密。摘要的结果是128bit的,所以网上经常看到的32位/16位MD5中的位对应的是16进制的32和16,128bit刚好是32字节。MD5只是一个摘要算法,由于它具有上面说的两个特性,在实际中(很多网站)也被用来对密码进行摘要,起到加密的作用。算法实现关于MD5的算法实现,当然可以参考RFC文档中的源代码,不过如果只在Windows平台应用的话,完全可以偷懒,调用Windows现有的API函数,只需三个API就可以搞定,很简单,呵呵!,分别是MD5Init、MD5Update、MD5Final,只是这三个函数没有在windows的.h头文件中有定义,也没有相应的importlibrary,需要自己声明它们的函数原型,这三个函数的具体实现在Cryptdll.dll中,需要动态加载!实现一:下面是具体的源代码,用Cryptdll.dll中的三个api实现:用法:MD5.exe[空格]input_message#include"stdafx.h"#include<Windows.h>#include<windows.h>#include<iostream>usingnamespacestd;typedefstruct{ULONGi[2];ULONGbuf[4];unsignedcharin[64];unsignedchardigest[16];}MD5_CTX;typedefvoid(CALLBACK*MD5Init_Tpye)(MD5_CTX*context);typedefvoid(CALLBACK*MD5Update_Tpye)(MD5_CTX*context,unsignedchar*input,unsignedintinlen);typedefvoid(CALLBACK*MD5Final_Tpye)(MD5_CTX*context);intmain(intargc,char**argv){if(argc!=2){cout<<"argscounterr!"<<endl;return0;}HINSTANCEhDLL=LoadL