MD5算法实验报告(XDU物联网安全)

您所在的位置:网站首页 java前沿技术物联网实验报告 MD5算法实验报告(XDU物联网安全)

MD5算法实验报告(XDU物联网安全)

2024-07-01 02:33| 来源: 网络整理| 查看: 265

个人博客地址:https://travis1024.github.io/

MD5算法实验 一、实验目的

编程实现MD5算法,深入理解MD5加密解密原理

二、实验所用仪器(或实验环境)

计算机科学与技术学院实验中心,可接入Internet网台式机44台。

三、实验基本原理及要求 1.实验原理

第一步:添加填充位,如果输入明文的长度(bit)对512求余的结果不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的长度为N*512+448(bit)

第二步:填充长度,在第一步结果之后再填充上原消息的长度,可用来进行的存储长度为64位。如果消息长度大于2^64,则只使用其低64位的值,即(消息长度 对 2^64取模)。在此步骤进行完毕后,最终消息长度就是N x 512+448+64=(N+1) x 512。

第三步,初始化缓冲区, 一个128bit的缓冲区可用于保存hash函数中间和最终结果。可表示为4个32bit的寄存器(A,B,C,D). 其中A=(01234567)16,B=(89ABCDEF)16,C=(FEDCBA98)16,D=(76543210)16。如果在程序中定义应该是 A=0X67452301L,B=0XEFCDAB89L,C=0X98BADCFEL,D=0X10325476L

第四步:循环处理数据

其中每一轮操作为

第五步,级联输出,给出MD5算法加密后的密文。

2.实验要求

明文自定义(例如,可以是一句英文名言名句),利用MD5算法对其加密,给出实验过程以及加密结果。

四、实验步骤及实验数据记录:(要有文字描述和必要截图) 1.算法说明

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

2.代码结构 3.具体实现步骤

(1)我们第一步要做的就是填充,如果输入信息的长度(bit)对512求余的结果 不等于448,就需要填充使得对512求余的结果等于448。填充的方法是填充一个1和n个0。填充完后,信息的长度就为N*512+448(bit);代码如下图所示:

(2)将输入信息的原始长度b(bit)表示成一个64-bit的数字,把它添加到上一步的结果后面(在32位的机器上,这64位将用2个字来表示并且低位在前)。当遇到b大于2^64这种极少的情况时,b的高位被截去,仅使用b的低64位。经过上面两步,数据就被填补成长度为512(bit)的倍数。也就是说,此时的数据长度是16个字(32byte)的整数倍。代码如下图所示:

(3)装入标准的幻数(四个整数),用一个四个字的缓冲器(A,B,C,D)来计算报文摘要,A,B,C,D分别是32位的寄存器,初始化使用的是十六进制表示的数字,注意低字节在前:

​ word A: 01 23 45 67 ​ word B: 89 ab cd ef ​ word C: fe dc ba 98 ​ word D: 76 54 32 10

(4)四轮循环运算:循环的次数是分组的个数(N+1)

① 定义4个辅助函数,每个函数的输入是三个32位的字,输出是一个32位的字:(&是与,|是或,~是非,^是异或),代码如下图所示:

​ F(X,Y,Z)=(X&Y)|((~X)&Z) ​ G(X,Y,Z)=(X&Z)|(Y&(~Z)) ​ H(X,Y,Z)=XYZ ​ I(X,Y,Z)=Y^(X|(~Z))

②设Mj表示消息的第j个子分组(从0到15):代码如下图所示:

​ FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3