




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、哈尔滨工程大学实验报告实验名称:Hash算法MD5班级:学号:姓名:实验时间: 2014 年6月成绩:指导教师:实验室名称:哈尔滨工程大学实验室与资产管理处制一、实验名称Hash 算法MD 5二、实验目的通过实际编程了解MD5算法的加密和解密过程,加深对Hash算法的认 识。三、实验环境(实验所使用的器件、仪器设备名称及规格)运行 Windows 或 Linux 操作系统的 PC 机,具有 gcc(Linux)、VQ Windows) 等C语言编译环境。四、任务及其要求(1)利用自己所编的MD5程序对一个文件进行处理,计算它的Hash值,提交程序代程和运算结果。(2)微软的系统软件都有 MD5
2、验证,尝试查找软件的 MD5值。同时,在 Windows 操作系统中,通过开始运行f sigverif 命令,利用数字签名查找验证非 Windows 的系 统软件。五、实验设计(包括原理图、真值表、分析及简化过程、卡诺图、源代码等)在MD5算法中,首先需要对信息进行填充,使其字节长度与448卞H512同余,即信息的字节长度扩展至 n*512+448, n为一个正整数。填充的方法如下:在信息 的后面填充第一位为1,其余各位均为0,直到满足上面的条件时才停止用0对信息填充。然后,再在这个结果后面附加一个以64位二进制表示的填充前信息长度。经过这两步的处理,现在的信息字节长度为n*512+448=
3、(n+1)*512 ,即长度恰好是512的整数倍,这样做的目的是为满足后面处理中后面处理中对信息长度 的要求。n个分组中第q个分组表示为Yq。MD5中有A、B、C、D,4个32位被称作链接变量的整数参数,它们的初始值分别为: A=01234567B=89abcdef,C=fedcba98 , D=当设置好这个4个链接变量后,就开始进入算法的4轮循环运算。循环的次数是信息中512位信息分组数目。首先将上面4个链接变量复制到另外 4个变量中A到AA, B到BB, C到CC D到DD以备后面进行处理。然后进入主循环,主循环有4轮,每轮循环都很相似。第1轮进行16次操作,每次操作对A、B、C和D中的其
4、中3个作一次非线性函数运算,然后将所得结果加上第4个变量,文本的一个子分组和一个常数。再将所得结果向左循环移S位,并加上A、B、C或D其中之一。最后用该结果取代 A、曰C或D其中之一。以下是每次操作中用到的 4个非线性函数(每轮一个)。F (B,C,D) =(BAC)V(BA D)(此处需修改)G (B,C,D) =(B A D) V (C A D) H (B,C,D) =B C DI (B,C,D) =C (B V D)(注:A是与,V是或,是非,是异或。)卜面为每一轮16步操作中的4次操作,16步操作按照一定次序顺序进行。)表示 A=B+(A+(F(B,C,D)+Mj+Ti)S)GG (A
5、,B,C,D,Mj,S,Ti)表示 A=B+(A+(G(G,C,D)+Mj+Ti )S)HH (A,B,C,D,Mj,S,Ti)表示 A=B+(A+(H(B,C,D)+Mj+Ti )S)II (A,B,C,D,Mj,S,Ti)表示 A=B+(A+(I (B,C,D)+Mj+Ti )S)(注: +”定义为mod 2的模运算。)Mj表示在第q个512位数据块中的第j个32位子分组,0WjW15。常数Ti可以有如下选择,在第i步中,Ti是96*abs(sin(i)的整数部分(注:96= 2。),i的单位是弧度。其中, Ti是32位的随机数源,它消除了输入数据中任何规律性的特征。表1-4说明了四轮主循
6、环中每轮 16步操作的具体步骤。所有这些完成之后,将 A、B、C D分别加上AA BR CC DD,然后用下一分组 数据继续运行算法,最后的输出是A、B C和D的级联。#include #include #include #include typedef unsigned char *POINTER;typedef unsigned short int UINT2;typedef unsigned long int UINT4;typedef structUINT4 state4;UINT4 count2;unsigned char buffer64; MD5_CTX;void MD5Init
7、(MD5_CTX *);void MD5Update(MD5_CTX *, unsigned char unsigned int);void MD5Final(unsigned char 16, MD5_CTX *);#define S11 7#define S12 12#define S13 17#define S14 22#define S21 5#define S22 9#define S23 14#define S24 20#define S31 4#define S32 11#define S33 16#define S34 23 #define S41 6#define S42 1
8、0#define S43 15#define S44 21static unsigned char PADDING64 = 0 x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, TOC o 1-5 h z 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;#defineF(x, y, z)(x) &(y)| (x)& (z)#defineG(x, y, z)(x) &(z)| (y)&(z)#define H(x,
9、 y, z) (x) A (y) A (z)#define I(x, y, z) (y)人(x) | (z)#define ROTATE_LEFT(x, n) (x) (32-(n)#define FF(a, b, c, d, x, s, ac) (a)+= F (b), (c), (d) + (x) + (UINT4)(ac); TOC o 1-5 h z (a)= ROTATE_LEFT (a),(s);(a)+=(b);)#define GG(a, b, c, d, x, s, ac) (a)+= G (b), (c), (d) + (x) + (UINT4)(ac);(a)= ROTA
10、TE_LEFT (a),(s);(a)+=(b);#define HH(a, b, c, d, x, s, ac) (a)+= H (b), (c), (d) + (x) + (UINT4)(ac);(a)= ROTATE_LEFT (a),(s);(a)+=(b);#define II(a, b, c, d, x, s, ac) (a)+= I (b), (c), (d) + (x) + (UINT4)(ac);(a)= ROTATE_LEFT (a),(s);(a)+=(b); inline void Encode(unsigned char *output, UINT4*input, u
11、nsigned int len)unsigned int i, j;for (i = 0, j = 0; j 8)outputj+1 = (unsigned char)(inputi& 0 xff);outputj+2=(unsignedchar)(inputi16)& 0 xff);outputj+3=(unsignedchar)(inputi24)& 0 xff);inline void Decode(UINT4 *output, unsigned char*input, unsigned int len) unsigned int i, j;for (i = 0, j = 0; j le
12、n; i+, j+= 4)outputi=(UINT4)inputj)(UINT4)inputj+1) 8) |(UINT4)inputj+2) 16) | (UINT4)inputj+3)count0 = context-count1 = 0;context-state0 = 0 x;context-state1 = 0 xefcdab89;context-state2 = 0 x98badcfe;context-state3 = 0 x;)inline voidMD5Update(MD5_CTX *context, unsignedchar *input, unsigned int inp
13、utLen)(unsigned int i, index, partLen;index = (unsigned int)(context-count0 3)& 0 x3F);count0+= (UINT4)inputLen3) (UINT4)inputLen count1+;context-count1 += (UINT4)inputLen 29);partLen = 64 - index;if (inputLen = partLen) memcpy(POINTER)&context-bufferindex,partLen);MD5Transform(context-state, contex
14、t-buffer);for (i = partLen; i + 63 state, &inputi);index = 0;elsei = 0;memcpy(POINTER)&context-bufferindex,(POINTER)&inputi, inputLen-i);inline void MD5Final(unsigned charMD5_CTX *context)unsigned char bits8;(POINTER)input,digest16,unsigned int index, padLen;Encode (bits, context-count, 8);index = (
15、unsigned int)(context-count0 3) & 0 x3f);padLen = (index state, 16);memset (POINTER)context, 0, sizeof (*context); void MD5Digest(char *pszInput, unsigned long nInputSize, char *pszOutPut)MD5_CTX context;unsigned int len = strlen (pszInput);MD5Init (&context);MD5Update (&context, (unsigned char *)ps
16、zInput, len);MD5Final (unsigned char *)pszOutPut, &context);Int main() char szDigest16;char encrypt200;printf(请输入要计算MD5fi的字符串:);gets(encrypt);printf(n加密结果:);MD5Digest(encrypt,strlen(encrypt),szDigest);int i;for(i=0;i16;i+)printf(%02X,(unsignedchar)szDigesti);getchar();六、实验步骤.算法分析在光盘中附加了有关MD5算法的头文件和,
17、根据所提供的文件分析MD5算法的实现过程。下面简单介绍所用到的结构体变量和函数。程序中用到的结构体变量如下:typedef struct md5_stateulong64 lengty;ulong32 state4,curlen;unsigned char buf64;md5_state;length 记录已经处理过的位数, curlen 记录已经处理过的字节数,数组 state存储上面所说的4个链接变量,buf作为处理过程中的缓存。程序中用到的函数如下:void md5_init(md5_state *md)函数名称:初始化函数参数说明:md指向一个上面所提到的结构体变量。初始化时把 cur
18、len和length 置为0,并把4个链接变量储存到state中。int md5_process(md5_state *md, const unsigned char *buf, unsignedlong len)函数名称:处理函数参数说明:md指向经过初过初始化函数处理过的一个结构体变量。3buf指向待处理的信息。len是buf中信息的长度,以字节为单位。这个函数对待处理的信息以512位为单位进行压缩,不足的部分存储在结构体中的buf 中,并且用len来指示信息的末尾,这样下次调用时会接着上一次的结果进行。int md5_done(md5_state *md, unsigned char *
19、Hash)函数名称:完成函数参数说明:md指向上面所处理过的结构体。Hash指向存储结果的缓冲区。这个函数对未完成的信息先进行padding操作,然后处理,并把最终结果存在Hash 指向的缓冲区中。1) int md5_text(void)函数名称:测试函数这个函数对上面的3个函数进行测试。函数内部定义了一组信息和Hash结果一一对应的数组。通过调用上面的 3个函数,并把结果和正确结果相比较,可以判断程序正确与否。.使用实例分析下面的程序实现了对“hello,world ”进行MD5处理的功能,可以作为调用MD5函数接口的参考。#includeint main( int argc,char *argv口)md5_state md;unsigned char *in= hello, world! ,out16;md5_init(&md);md5_process(&md,in,strlen(in);md5_done(&md,out);printf( %S ,out);system( PAUSE );return 0;说明:由于程序中所用的结构体只在初始化函数中赋初始值,其中间过程可以保留下来,所以对一段信息分多次处理可以得到同样的结果。比如说使用下面的语句可以得到和上面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 玉柴职业技术学院《创业经营管理》2023-2024学年第二学期期末试卷
- 南京审计大学金审学院《登山运动》2023-2024学年第一学期期末试卷
- 宁夏幼儿师范高等专科学校《音乐分析专业理论教学》2023-2024学年第一学期期末试卷
- 2025年质量管理考试试题及答案
- 2025年客服经理考试试题及答案
- 工业机器人系统操作试题复习测试卷
- 2025年民法典试题及答案
- 2025年08c语言复试题及答案
- 2025年全国考博数学试题及答案
- 2025年垃圾治理面试试题及答案
- 面包生产工艺流程图
- 特种设备使用单位名称变更申请表(共2页)
- CASS勘测定界操作指导方案
- 员工考勤表(通用版)
- 3号钢筋加工场桁吊安装方案
- 关于加快骆家庄城中村改造专题报告(第四稿)
- 贯彻九项准则《医疗机构工作人员廉洁从业九项准则》PPT
- 公司外派人员申请审批表
- 2021年度药店培训计划一览表
- 使用rhIL-11才能更加合理地防治血小板减少 指南(全文)
- 节能评估报告编制要求 具体规定
评论
0/150
提交评论