贵州大学实验报告学院:计算机科学与技术学院专业:信息安全班级:姓名学号实验组实验时间2014-12-5指导教师李秦伟成绩实验项目名称杂凑函数MD5实验目的掌握MD5算法的工作原理。了解字典攻击的工作原理。实验基本方法1、编写一个MD5算法,编程语言任选;2、编程实现对一个字符串计算其MD5杂凑值;3、编程实现对一个文件计算其MD5杂凑值;4、编程实现完成RSA数字签名和签名验证实验。5、编程实现利用字典攻击的MD5反算法。(自****设计算法)说明:1、MD5算法可以自编,也可以网上下载现成算法,参见学校教学平台本课程的参考程序。2、RSA算法参见学校教学平台本课程的参考程序。实验步骤1、编写一个MD5算法。2、编程实现对一个字符串计算其MD5杂凑值。3、对一个字符串计算并记录其杂凑值,改变1位明文信息观察并记录MD5的输出。重复3次。4、对一个文件计算并记录其杂凑值,改变1位明文信息观察并记录MD5的输出。5、编程实现完成RSA数字签名和签名验证实验。用RSA私钥加密文件的杂凑值实现签名,更改文件中的单个字符,重复4、5步骤3次,观察签字的变化。6、*编程实现利用字典攻击的MD5反算法。7、*假设字符串是全数字的4位口令,利用上面程序破解口令。8、*对同一段字符,改变其中的描述,内容不变(例如:空格的多少、改变标点的全角半角等)观察签名后的结果。实验结果MD5算法为网上下载的算法实验代码://#ifndefMD5_H#defineMD5_H#include<string>#include<fstream>/*Typedefine*/typedefunsignedcharbyte;typedefunsignedintuint32;usingstd::string;usingstd::ifstream;/*MD5declaration.*/classMD5{public: MD5(); MD5(constvoid*input,size_tlength); MD5(conststring&str); MD5(ifstream&in); voidupdate(constvoid*input,size_tlength); voidupdate(conststring&str); voidupdate(ifstream&in); constbyte*digest(); stringtoString(); voidreset();private: voidupdate(constbyte*input,size_tlength); voidfinal(); voidtransform(constbyteblock[64]); voidencode(constuint32*input,byte*output,size_tlength); voiddecode(constbyte*input,uint32*output,size_tlength); stringbytesToHexString(constbyte*input,size_tlength); /*classuncopyable*/ MD5(constMD5&); MD5&operator=(constMD5&);private: uint32_state[4]; /*state(ABCD)*/ uint32_count[2]; /*numberofbits,modulo2^64(low-orderwordfirst)*/ byte_buffer[64]; /*inputbuffer*/ byte_digest[16]; /*messagedigest*/ bool_finished; /*calculatefinished?*/ onstbytePADDING[64]; /*paddingforcalculate*/ onstcharHEX[16]; enum{BUFFER_SIZE=1024};};#endif/*MD5_H*///#include""usingnamespacestd;/*ConstantsforMD5Transformroutine.*/#defineS117#defineS1212#defineS1317#defineS1422#defineS215#defineS229#defineS2314#defineS2420#defineS314#defineS3211#defineS3316#defineS3423#defineS416#defineS4210#defineS4315#defineS4421/*F,G,HandIarebasicMD5functions.*/#defineF(x,y,z)(((x)&(y))|((~x)
杂凑函数MD5 来自淘豆网www.taodocs.com转载请标明出处.