密码学MD5实验报告

合集下载

实验三 MD5算法的设计与实现

实验三 MD5算法的设计与实现

实验三MD5算法的设计与实现MD5算法及C++实现一、理论部分:1、预备知识1.1什么是数据校验通俗的说,就是为保证数据的完整性,用一种指定的算法对原始数据计算出的一个校验值。

接收方用同样的算法计算一次校验值,如果和随数据提供的校验值一样,就说明数据是完整的。

1.2最简单的检验实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最准确的。

同时也是效率最低的。

适用范围:简单的数据量极小的通讯。

应用例子:龙珠cpu在线调试工具bbug.exe。

它和龙珠cpu间通讯时,bbug发送一个字节cpu返回收到的字节,bbug确认是刚才发送字节后才继续发送下一个字节的。

1.3奇偶校验Parity Check实现方法:在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。

校验位可以通过数据位异或计算出来。

应用例子:单片机串口通讯有一模式就是8位数据通讯,另加第9位用于放校验值。

1.4 bcc异或校验法(block check character)实现方法:很多基于串口的通讯都用这种既简单又相当准确的方法。

它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常把她附在通讯数据的最后一起发送出去。

接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。

校验值计算的代码类似于:unsigned uCRC=0;//校验初始值for(int i=0;i<DataLenth;i++) uCRC^=Data[i];适用范围:适用于大多数要求不高的数据通讯。

应用例子:ic卡接口通讯、很多单片机系统的串口通讯都使用。

1.5 crc循环冗余校验(Cyclic Redundancy Check)实现方法:这是利用除法及余数的原理来进行错误检测的.将接收到的码组进行除法运算,如果除尽,则说明传输无误;如果未除尽,则表明传输出现差错。

md5实验报告

md5实验报告

md5实验报告
# MD5实验报告
## 简介
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,用于对任意
长度的信息产生一个128位的哈希值。

它由美国密码学家罗纳德·李维斯特(Ronald Rivest)设计,于1992年公开。

MD5算法的设计目标是在计算速度
上尽量保持优秀的性能,同时也要尽量保证安全性。

## 实验目的
本实验旨在通过对MD5算法的实验,了解其在信息安全领域的应用和特点。

## 实验过程
1. 选择一段文本作为输入数据。

2. 使用MD5算法对输入数据进行哈希运算,得到对应的128位哈希值。

3. 对比不同输入数据产生的哈希值,观察MD5算法的碰撞概率。

## 实验结果
经过实验,我们发现MD5算法在对不同输入数据进行哈希运算时,能够产生唯一的128位哈希值。

虽然MD5算法在碰撞概率上存在一定的问题,但在实际
应用中,仍然具有一定的安全性和可靠性。

## 结论
MD5算法作为一种广泛使用的哈希函数,在信息安全领域有着重要的应用价值。

然而,随着计算能力的提升和攻击技术的发展,MD5算法的安全性逐渐受到挑战。

因此,在实际应用中,我们需要谨慎选择合适的哈希算法,并结合其他安
全措施,以确保信息的安全性和完整性。

MD5实验报告(word文档良心出品)

MD5实验报告(word文档良心出品)

一、MD5算法描述MD5算法是计算机安全领域广泛使用的一种散列算法之一,用以提供消息的完整性保护。

本次实验中,对于输入的任意长度的一段数据,输出唯一固定的128位MD5散列值。

MD噂法分为以下步骤:1 、初始化(填充)首先对于任意长度的消息,将其按照512 位进行分组,为保证每个分组都是512 位,需要对消息进行填充。

填充方法是先在消息末尾填一个1,再在后面填若干个0,使其长度I恰好满足I=448(mod512),然后在其后附加上64 位的(填充前)消息长度, 确保不同的消息在填充后不相同消息在填充后不相同。

其次将每个分组512 位的数据划分为16个32 位的子分组,在实现过程中,将其表示为16 个32 位整数进行运算。

初始化四个32 位链接变量为:A=0x67452301B=0xefcdab89C=0x98badcfeD=0x103254762、单步操作与主循环MD5共分为4轮,每轮进行16步单步操作,MD5的单步操作如下其中,g k (k=0,123)是每次运算中用到的非线性函数(每轮一个),用C 语言定义如下^define gO(b> c,. d) ((b&c) (、b 赴d))ftdefine gl (b, c> d) ((b&d) )ffdef ine g2(b, c f d) (b e d) tfdef ine g3(b, c f d) (c (b d))数据块X[ d(i)]来自于初始化中分好的16个32位数据分组,根据循环 步数按以下置换函数选取(i 表示循环的第i 步)T i 是一些随机数序列,T i 的值如下(按顺序选取)Pdefine rO(i)#define rl (i)Sdefine r2(i)Sdefine r3 (i)(i%16) <(l+5*i)%16) ((5+3*i)%16) <(7*i)%16)unsigned int T .64.=:0xd76aa478;0xe8c7b756?Ox242070dL Oxclbdce-ee,0xf57c0faf,0x4787c62a T0xa8304613:0xfd469501? 0x698098d8,0x8b44f7af7OxffffSbbl. 0x895cd7te7 0x6b90U22f0xfd987193,0x3679438^ 0x49b40821, Ch<f61u2562, OxcO4Ob34O, 0x265e5a51?Oxe^GcTaa, 0xd62fl05d. 0x02141453, 0xd8ale68L?0xe7d3fbc8?Ox21.elcde6, 0xc337O7d6T0xf4d50d87r0x455al4ed f0^a9e3e905,OxfcefaofS, 0x676f02d9. 0x8d2a4c8a, 0xfffa3942,0x8771f681, 0x6旳d6122, 0xfM538(k, 0xa4beea44:0x4bdecfa9?0xf6bb4b60?Oxbebfbc7O? 0x289b7ec6:0xeaaI27£a T0s64ef3085:0x04851 dO5? 0xd9d4d039, 0xe6db99e5?DxlfaSycfS, 0xc4ac566570xf4292244?0x432aff97I0xab9423a7J0xfc93a039, 0x655b59c3,0x8f0ccc92, Oxffeff47d. 0x85845ddl? 0x6faS7e4f, 0xfe2ce6e0,0xa3014314?Ox4eO811al, Oxf7537eS2. 0xbd3af2o570x2ad7d2bb.0xeb86d391?};vv<S i表示循环左移S i位,S i的数值如下(按顺序选取)unsigned int S[64]={7,12417, 22, 7,12f17f 22, 7, 12,17, 22t 1, 12,17t 22,5, 9,14, 20, 5, 9, 14, 20, 5, 9, 14,20, 5, 9,14, 20,4, 11,16, 23, 4,11,16, 23, 4,11,16, 23* 4,11, 16, 23,6,10,15, 21, 6,10,15, 21, 6F10,15, 21, 6, 10, 15, 21};因此,MD5主要的一个单步操作可以表示为a =b ((a f(b,c,d) T[i] X[J(i)])尺S[i])每轮16步结束后的4个32位数作为下一轮的输入继续循环束后的输入再加上初始值即得到最终结果128位的散列值' 循环如下图四轮结64步主A| B| C| Bjn 彳第1轮16步便用卧P Q; 电 B ] cl 叫+1第2轮"步便用驻Pl |A| Bl C| D| "■►f 第3轮16步便用知pt1 ~Al Bl Cl Dl ~程序验证为了验证程序的正确性,我们通过查找 Wikipedia 上使用的3个 测试向量来进行测试,测试向量如下:ND5(*The quick bxown fox jumps over the lazy dog")=9e 107d9d372bb6326b d8Id3542a419d6KD5 (*The quick brown fos jumps over the lazy dog- ■*)= edd909c290dOfb IcaOGSff addf 2 2cbdOMD5(^)=d41J8cd98f0Ob204e980O99SecfS427e运行程序,得到的结果如下:X * - ■ <■>第4轮"步使用g 尹P3v ! I ! I 1 + 模屮加C ^D 工cyniF可以看到,实验结果与测试向量相同,验证了程序的正确性。

MD5算法实验报告

MD5算法实验报告

MD5算法实验报告实验报告:MD5算法的原理与应用一、实验目的本实验旨在通过研究MD5(Message-Digest Algorithm 5)算法的原理和应用,了解其工作原理和实现过程,并掌握其具体应用技巧。

二、实验内容1.了解MD5算法的基本原理和特点;2.分析MD5算法的具体实现过程;3.实现一个简单的MD5加密程序,并进行测试;4.掌握MD5算法的应用技巧。

三、实验原理1. 输入任意长度的数据,输出固定长度的Hash值,通常为128位;2. 安全性较高,Hash值的变化能较好地反映原始数据的变化;3. 不可逆性:无法通过Hash值反推出原始数据;4. Hash值相同的概率很低,冲突概率较小。

1.数据填充:对输入数据进行填充,使其长度满足一定要求;2.划分数据:将填充后的数据划分为多个512位的数据块;3.初始化变量:设置四个32位的变量,作为初始值;4.处理数据块:对每个数据块进行处理,分为四轮,每轮包括四个步骤,即置换、模运算、加法和循环左移操作。

5. 输出结果:将四个32位变量连接起来,即得到最终的128位Hash值。

四、实验过程1.学习MD5算法的原理和实现细节;2. 使用Python编程语言实现一个简单的MD5加密程序,并进行测试。

实验代码如下:```import hashlibdef md5_encrypt(source):md5 = hashlib.md5md5.update(source.encode('utf-8'))return md5.hexdigestif __name__ == '__main__':source_str = input("请输入要加密的字符串:")encrypted_str = md5_encrypt(source_str)print("加密后的字符串为:", encrypted_str)```五、实验结果与分析通过上述实验代码,可以输入一个字符串,程序将会对该字符串进行MD5加密,并将加密结果输出。

《信息安全》实验报告3MD5的计算和破解

《信息安全》实验报告3MD5的计算和破解

《信息安全》实验报告3MD5的计算和破解1.引言信息安全是一个重要的领域,加密算法是其中的核心技术之一、MD5(Message Digest Algorithm 5)是一种常用的哈希算法,广泛应用于文件校验、数据完整性验证等等领域。

本实验旨在通过计算和破解MD5,深入了解MD5的工作原理和安全性。

2.实验目的(1)了解MD5算法的基本原理;(2)掌握MD5算法的计算过程;(3)通过破解MD5,了解其安全性问题。

3.实验过程3.1MD5算法的基本原理MD5算法通过对输入的字符串进行分组,然后对每个分组进行一系列的位运算和逻辑运算,最终生成一个128位(16字节)的哈希值。

MD5算法的基本原理如下:(1)填充:在输入字符串的末尾填充一些字节,使得输入字符串的长度能被64整除。

(2)初始化:将16进制的常数赋给4个32位寄存器A、B、C、D。

(3)分组:将填充后的输入字符串分为若干个512位的分组。

(4)处理:对每个分组进行一系列的位运算和逻辑运算。

(5)生成哈希值:将处理后的结果按一定顺序连接起来,得到一个128位的哈希值。

3.2MD5的计算过程通过Python编程语言实现MD5算法的计算过程如下:(1)初始化四个32位寄存器A、B、C、D,并赋初值。

(2)将待计算的字符串分组,每个分组512位。

(3)对每个分组进行一系列的位运算和逻辑运算,生成一个128位的哈希值。

(4)将生成的哈希值转换为16进制字符串。

3.3MD5的破解MD5算法虽然被广泛应用,但是也存在一定的安全性问题。

MD5哈希值是固定长度的,而输入字符串的长度可以是任意长度的,这就导致了哈希碰撞(hash collision)的概率增加。

哈希碰撞是指不同的输入字符串可以生成相同的哈希值,从而破解MD5密码。

破解MD5密码一般采用暴力破解和字典攻击两种方式。

4.实验结果通过编程计算MD5并破解一个MD5密码,结果如下:5.实验总结通过本次实验,我们了解了MD5算法的基本原理和计算过程。

MD5实验报告范文

MD5实验报告范文

MD5实验报告范文实验报告:MD5算法的原理、实验过程及结果分析1.实验目的MD5(Message-Digest Algorithm 5)是一种常用的哈希算法,主要用于对消息进行完整性校验和数字签名等应用。

本实验旨在探究MD5算法的原理及实现过程,并通过实验验证其正确性和有效性。

2.实验原理MD5算法主要包括以下步骤:(1)填充消息首先,将消息进行填充,使其长度能够被512位整除。

填充方式为在消息末尾添加一个'1',然后添加若干个'0',以确保消息末尾有64位的原始消息长度。

(2)初始化缓冲区(3)消息分组将填充后的消息按512位分组,每组包含16个32位的子分组。

(4)循环压缩函数对每个分组进行四轮循环操作,共64轮。

每一轮包含四个步骤:F 函数、G函数、H函数和I函数。

每个函数分别对A、B、C、D进行操作,并根据当前轮数选择不同的方式对数据进行置换和变换。

(5)累加结果每轮循环后,计算出的A、B、C、D将与缓冲区中的原始值进行累加。

(6)输出结果经过64轮循环后,得到的缓冲区即为MD5的输出结果。

3.实验过程(1)理论分析根据MD5算法的原理,我们可以分析MD5的输入为任意长度的消息,输出为固定长度(128位)的哈希值。

MD5算法具有较高的计算效率和较好的抗碰撞性能。

(2)实验步骤a.编写MD5算法的编程代码,包括填充消息、初始化缓冲区、消息分组、循环压缩函数等步骤。

b.准备不同长度的测试消息,包括短消息和长消息。

c.分别对不同长度的消息进行哈希计算,并记录计算时间。

d.比较计算结果与预设结果是否一致。

4.实验结果分析经过实验,我们得到了如下结果:(1)对于短消息(长度小于512位),MD5能够在较短时间内完成计算,且计算结果与预设结果一致。

(2)对于长消息(长度大于512位),MD5的计算时间随着消息长度的增加而增加,但计算结果始终保持一致和正确。

5.结论与总结MD5算法是一种常用的哈希算法,具有较高计算效率和较好的抗碰撞性能。

《信息安全》实验报告3MD5的计算和破解

《信息安全》实验报告3MD5的计算和破解

《信息安全》实验报告3MD5的计算和破解实验目标:1.了解MD5算法的基本原理。

2.掌握MD5算法的计算和应用。

3.理解MD5算法的弱点,并尝试破解MD5哈希值。

一、实验原理:MD5(Message Digest Algorithm 5)是一种常用的消息摘要算法,用来确保数据的完整性和一致性,广泛应用于信息安全领域中。

MD5将任意长度的输入数据进行计算,得到一个128位的哈希值。

实验步骤:1.编写MD5的计算代码。

2.编写MD5的破解代码。

3.运行代码,计算给定字符串的MD5哈希值。

4.破解给定MD5哈希值。

二、实验过程:1.MD5的计算代码编写:MD5算法的计算过程包括四个主要的步骤:填充位、增加长度、初始化变量和循环计算。

a.填充位:将待计算的消息填充至512位的倍数,填充位为1后面加零。

b.增加长度:在填充消息后增加一个64位的二进制数,表示原始消息的长度。

c.初始化变量:设定固定的四个变量,用于循环计算。

d.循环计算:将填充后的消息分为512位的块进行循环计算,计算结果与前一块的结果进行累加。

2.MD5的破解代码编写:MD5的破解目标是通过已知的MD5哈希值,找到对应的原始数据。

一般的方法是尝试不同的输入数据,计算MD5哈希值,然后与已知的哈希值进行比较。

a.枚举法:通过不断尝试不同的输入数据,计算MD5哈希值与给定哈希值进行比较,直到找到对应的原始数据。

b.字典法:通过预先准备好的字典文件,将字典中的每个词进行MD5哈希计算,然后与给定哈希值进行比较,查找对应的原始数据。

3.实验结果展示:4.MD5的破解:a.枚举法:从'a'到'z'的26个字符中依次尝试,计算MD5哈希值并与给定值进行比较,直到找到对应的原始数据。

b.字典法:根据常见密码字典构建一个文本文件,逐行读取文件中的词进行MD5哈希计算并与给定值进行比较,直到找到对应的原始数据。

5.实验总结:实验中,我们通过计算MD5哈希值和尝试破解,深入了解了MD5算法的原理和应用。

md5算法实验总结

md5算法实验总结

MD5(Message Digest Algorithm 5)是一种常见的哈希函数,用于产生数字指纹(digest)以及对数据进行完整性验证。

以下是对MD5算法实验的总结:
1. MD5算法的原理:
- MD5算法将任意长度的输入数据转换为128位的输出,通常表示为32个十六进制数字。

- MD5算法的核心是对输入数据进行分组、填充、循环处理和合并等步骤,最终生成128位的摘要。

2. 实验步骤:
- 选择一个字符串或文件作为输入数据。

- 使用MD5算法对输入数据进行处理,生成对应的128位摘要。

- 可以使用现成的MD5算法库或工具,也可以自行编写MD5算法的实现。

3. 实验结果:
- 实验结果将会得到一个128位的十六进制数字,即为MD5摘要。

- 不同的输入数据将会生成不同的MD5摘要,即使输入数据只有微小的变化。

4. 应用场景:
- MD5算法常用于验证数据的完整性,比如下载文件后对文件进行MD5校验,以确保文件未被篡改。

- 在密码存储中,MD5算法曾经被广泛使用,但由于其存在碰撞(collision)风险和加密性能问题,现在不再推荐将MD5用于密码存储。

总的来说,MD5算法是一种常见的哈希算法,用于生成数据的数字指纹。

然而,由于其已知的安全性问题,现在已经不再被推荐用于安全敏感的场景。

在实际应用中,
可以考虑使用更安全的哈希算法,比如SHA-256等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
StringBuffer stringbuffer =newStringBuffer(2 * n);
intk = m + n;
for(intl = m; l< k; l++) {
appendHexPair(bytes[l], stringbuffer);
}
returnstringbuffer.toString();
publicclassEXEMD5 {
/*设置MD5值输出为16进制(从0到F)*/
protectedstaticcharhexDigits[] = { '0', '1','2', '3', '4', '5', '6', '7', '8', '9','A', 'B', 'C','D', 'E', 'F'};
实验四:密码学MD5实验报告
专业:计算机科学与技术班级:2015级姓名:孟亚超学号:20150402201006
实验名称
密码学MD5
实验目的
自学md5原理,编写MD5算法,了解算法工作过程
实验原理
MD5是一个不可逆的算法,是单向的,通常用于签名验证和一些不需要还原原文的算法,这种算法加密后就不能还原回原文,这种算法还原回原文有无穷种原文,所以理论上是不可能被out.println("非法输入,请重新运行程序! ");
System.exit(0);
}
longbeginTime=System.nanoTime();
String md5=getFileMD5String(exe);
longendTime =System.nanoTime();
FileChannel ch =in.getChannel();
MappedByteBuffer byteBuffer =ch.map(FileChannel.MapMode.READ_ONLY, 0,file.length());
messagedigest.update(byteBuffer);
returnbufferToHex(messagedigest.digest());
}
/*将字节数组转换为字符串类型*/
privatestaticString bufferToHex(bytebytes[]){
returnbufferToHex(bytes, 0,bytes.length);
}
/*将字节数组从第m位元素到第n位元素的部分转换成字符串类型*/
privatestaticString bufferToHex(bytebytes[],intm,intn){
doubletime=endTime-beginTime;
System.out.println("【运行结果】");
System.out.println("选择的文件是: "+exe.getName());
System.out.println("该文件MD5值: "+md5);
System.out.println("计算MD5用时: "+(time/1000000)+"毫秒");
e.printStackTrace();
}
}
/*计算文件(包括EXE文件)MD5值的算法*/
publicstaticString getFileMD5String(File file)throwsIOException{
FileInputStream in =newFileInputStream(file);
}
privatestaticvoidappendHexPair(bytebt, StringBuffer stringbuffer) {
charc0 =hexDigits[(bt& 0xf0) >> 4];
charc1 =hexDigits[bt& 0xf];
stringbuffer.append(c0);
注意事项
1、MD5不可能被还原
2、MD5算法加密后的长度是固定的,长度为32位
实验环境说明
Window7
Javajdk
Eclipse for EE
实验步骤
源代码
packagecom.topcheer;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
stringbuffer.append(c1);
}
publicstaticvoidmain(String[] args)throwsIOException{
System.out.println("请选择你要计算MD5值的应用程序文件!");
System.out.println("【1】erase.exe【2】hello.exe");
importjava.nio.MappedByteBuffer;
importjava.nio.channels.FileChannel;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importjava.util.Scanner;
/*获取MD5算法,并判断是否存在MD5算法(判断是否正确导入了加密库)*/
protectedstaticMessageDigestmessagedigest=null;
static{
try{
messagedigest= MessageDigest.getInstance("MD5");
}catch(NoSuchAlgorithmException e) {
}
}
程序运行结果截图
实验结果分析
我们不难发现,这两个EXE文件虽然内容不同,但是MD5值却是相同的!
MD5,用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
intchoose=newScanner(System.in).nextInt();
File exe=null;
if(choose==1){
exe =newFile("./src/erase.exe");
}
elseif(choose==2){
exe =newFile("./src/hello.exe");
相关文档
最新文档