密码学实验(MD5实验)
- 格式:docx
- 大小:578.48 KB
- 文档页数:10
md5实验报告
# MD5实验报告
## 简介
MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,用于对任意
长度的信息产生一个128位的哈希值。
它由美国密码学家罗纳德·李维斯特(Ronald Rivest)设计,于1992年公开。
MD5算法的设计目标是在计算速度
上尽量保持优秀的性能,同时也要尽量保证安全性。
## 实验目的
本实验旨在通过对MD5算法的实验,了解其在信息安全领域的应用和特点。
## 实验过程
1. 选择一段文本作为输入数据。
2. 使用MD5算法对输入数据进行哈希运算,得到对应的128位哈希值。
3. 对比不同输入数据产生的哈希值,观察MD5算法的碰撞概率。
## 实验结果
经过实验,我们发现MD5算法在对不同输入数据进行哈希运算时,能够产生唯一的128位哈希值。
虽然MD5算法在碰撞概率上存在一定的问题,但在实际
应用中,仍然具有一定的安全性和可靠性。
## 结论
MD5算法作为一种广泛使用的哈希函数,在信息安全领域有着重要的应用价值。
然而,随着计算能力的提升和攻击技术的发展,MD5算法的安全性逐渐受到挑战。
因此,在实际应用中,我们需要谨慎选择合适的哈希算法,并结合其他安
全措施,以确保信息的安全性和完整性。
哈尔滨工程大学实验报告实验名称: Hash 算法MD5 班级:学号:姓名:实验时间: 2014年6月成绩:指导教师:实验室名称:哈尔滨工程大学实验室与资产管理处制一、实验名称Hash算法MD5二、实验目的通过实际编程了解MD5 算法的加密和解密过程,加深对Hash 算法的认识。
三、实验环境(实验所使用的器件、仪器设备名称及规格)运行Windows 或Linux 操作系统的PC 机,具有gcc(Linux)、VC(Windows)等C 语言编译环境。
四、任务及其要求(1)利用自己所编的MD5 程序对一个文件进行处理,计算它的Hash 值,提交程序代程和运算结果。
(2)微软的系统软件都有MD5 验证,尝试查找软件的MD5 值。
同时,在Windows 操作系统中,通过开始→运行→sigverif 命令,利用数字签名查找验证非Windows 的系统软件。
__五、实验设计(包括原理图、真值表、分析及简化过程、卡诺图、源代码等)在MD5 算法中,首先需要对信息进行填充,使其字节长度与448 模512 同余,即信息的字节长度扩展至n*512+448,n 为一个正整数。
填充的方法如下:在信息的后面填充第一位为1,其余各位均为0,直到满足上面的条件时才停止用0 对信息填充。
然后,再在这个结果后面附加一个以64 位二进制表示的填充前信息长度。
经过这两步的处理,现在的信息字节长度为n*512+448= (n+1)*512,即长度恰好是512 的整数倍,这样做的目的是为满足后面处理中后面处理中对信息长度的要求。
n 个分组中第q 个分组表示为Yq。
MD5 中有A、B、C、D,4 个32 位被称作链接变量的整数参数,它们的初始值分别为:A=01234567B=89abcdef,C=fedcba98,D=76543210当设置好这个4 个链接变量后,就开始进入算法的4 轮循环运算。
循环的次数是信息中512 位信息分组数目。
首先将上面4 个链接变量复制到另外4 个变量中A 到AA,B 到BB,C 到CC,D 到DD,以备后面进行处理。
一、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(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加密,并将加密结果输出。
《信息安全》实验报告(3)实验名称:________________ 指导教师:___________ 完成日期:________________ 专 业:________________ 班 级:___________ 姓 名:________________ 一、实验目的:理解数字摘要的原理;能够利用现有软件工具进行MD5摘要的计算;了解MD5在实际数据库应用系统中的应用;能够进行简单的MD5摘要破解。
二、实验内容:1、自行寻找一款能够计算文件MD5摘要值的软件,对一个文本文件(或其他类型文件)进行摘要值计算并记录。
将该文件内容进行稍许修改后再进行一次摘要值计算并记录,比较两次摘要值。
2、自行寻找一款能够计算字符串MD5摘要值的软件,对一个任意字符串进行摘要值计算并记录。
对该字符串内容进行稍许修改后再进行一次摘要值计算并记录,比较两次摘要值。
3、自行寻找方法找到以下三个md5值的原文(字符串)3508d8fedc70d04c5d178dbbc2eac72a (7位,纯数字)ef73781effc5774100f87fe2f437a435(8位,数字+字母)909cc4dab0b2890e981533d9f27aad97(8位,数字+字母+特殊符号)三、实验过程:(实现步骤等)使用Hash 1.04版的计算MD5值软件,如下:MD5的计算和破解 于泳海 2014-11-6 信息管理与信息系统11级新本班 贾文丽计算某一文件的MD5,将文件进行更改后,查看两次MD5值,如下:更改文件后:四、实验结果与结论:将两次文件的MD5进行比较我们发现,同一文件如果进行修改,内容上出现一个字符的不同都会导致其MD5校验不同。
五、实验总结:(实验中遇到的问题及解决方法,心得体会等)在本节实验中,理解了数字摘要的原理并能够利用现有软件工具进行MD5摘要的计算,而且了解了MD5在实际数据库应用系统中的应用并能够进行简单的MD5摘要破解。
《信息安全》实验报告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算法的原理、实验过程及结果分析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的计算和破解实验目标: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(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等。
国家开放大学电大《信息安全》实验报告
本次实验的目的是测试学生们对信息安全的理解程度以及运用
能力,以确保他们的信息技能能够应用到实际中。
实验一:密码学
在密码学实验中,学生们研究了加密和解密的基本概念。
通过
实践,他们掌握了使用不同密码算法的技能如DES、RSA和MD5。
他们还学会了如何建立一个安全的通信管道,并能够防止非法用户
访问敏感信息。
实验二:网络安全
网络安全实验中,学生们研究了识别和预防网络攻击的技能。
他们学会了检测网络漏洞和如何处理欺诈行为。
此外,他们还学会
了在网络上安全地存储文件和保护隐私信息。
实验三:风险评估
在风险评估实验中,学生们研究了如何评估信息安全风险并采取适当的措施来降低这些风险。
他们了解了安全管理计划的概念以及如何制定有效的安全策略。
通过这几个实验的学习,学生们掌握了信息安全的基本概念和技能,能够应用这些技能来保护信息的安全。
这些实验也为他们未来的职业发展奠定了基础,以确保他们有能力在信息安全领域有所作为。
实验报告一、实验目的1.MD5算法(1)理解Hash函数的计算原理和特点(2)理解MD5算法原理2.SHA1算法(1)理解SHA1函数的计算原理和特点(2)理解SHA1算法原理二、实验内容与设计思想①MD5算法MD5哈希算法流程:1.对于任意长度的明文,MD5首先对其进行分组,使得每一组的长度为512位,然后对这些明文分组反复重复处理。
对于每个明文分组的摘要生成过程如下:(1)将512位的明文分组划分为16个子明文分组,每个子明文分组为32位。
(2)申请4个32位的链接变量,记为A、B、C、D。
(3)子明文分组与链接变量进行第1轮运算。
(4)子明文分组与链接变量进行第2轮运算。
(5)子明文分组与链接变量进行第3轮运算。
(6)子明文分组与链接变量进行第4轮运算。
(7)链接变量与初始链接变量进行求和运算。
(8)链接变量作为下一个明文分组的输入重复进行以上操作。
(9)最后,4个链接变量里面的数据就是MD5摘要。
2.MD5分组过程对于任意长度的明文,MD5可以产生128位的摘要。
任意长度的明文首先需要添加位数,使明文总长度为448(mod512)位。
在明文后添加位的方法是第一个添加位是l,其余都是0。
然后将真正明文的长度(没有添加位以前的明文长度)以64位表示,附加于前面已添加过位的明文后,此时的明文长度正好是512位的倍数。
当明文长度大于2的64次方时,仅仅使用低64位比特填充,附加到最后一个分组的末尾。
经过添加处理的明文,其长度正好为512位的整数倍,然后按512位的长度进行分组(block),可以划分成L份明文分组,我们用Y0,Y1,……,YL-1表示这些明文分组。
对于每一个明文分组,都要重复反复的处理,如图所示。
3.MD5子明文分组和链接变量对于512位的明文分组,MD5将其再分成16份子明文分组(sub-block),每份子明文分组为32位,我们使用M[k](k= 0, 1,……15)来表示这16份子明文分组。
实验一MD5哈希算法报告1 实验目的(1)理解MD5算法的基本思想。
(2)实现MD5算法。
(3)通过该算法加深对HASH 算法的理解。
2 实验内容基于Visual C++,编程实现各类消息的摘要值。
要求:输入任意字符串,以16进制形式输出其MD5值。
3 实验原理MD5是由国际著名密码学家、“图灵奖”获得者兼公钥加密算法RSA 的创始人、麻省理工大学的RonaldRivest 教授于1991年设计的。
它与SHA 共同构成两大哈希算法,广泛应用于金融、证券等电子商务领域。
MD5输入是任意长的消息,分组长度为512比特,输出128比特。
MD5算法框图如下:由图中可看出,MD5是四轮运算,每轮又要进行16步迭代运算,4轮共需64步完成。
其中T[1,…,64]为64个常数,参与不同轮的计算。
X[k]=M[q ×16+k],即消息第q 个分组中的第k 个32比特字(k=1,…,16)。
F 、G 、H 和I 为各轮逻辑函数,定义如下:4轮处理过程中,每轮以不同的次序使用16个字。
在第1轮以字的初始次序使用,第2轮到第4轮分别对字的次序i 做置换后得到一个新次序,然后以新次序使用16个字。
3个置换分别为ρ2(i)=(1+5i) mod 16,ρ3(i)=(5+3i) mod 16和ρ4(i)=7i mod 16。
每轮的每步变换为a=b+CLSs(a+g(b,c,d)+X[k]+T[i),其中g为逻辑函数,CLSs为循环左移s位,X[k]为分组的第k个32bit字,T[i]为常数表中第i个32-bit字,+为模232加法。
特别当g=F,该变换记为FF(a, b, c, d, xj, s, ti)。
1轮中的16步变化按照一定的次序进行,4轮进行64步。
每轮输出、中间结果和最终Hash值存储在缓冲区a、b、c和d。
缓冲区初始化以十六进制表示为a=01234567,b=89ABCDEF,c=FEDCBA98,d=76543210。
《密码学》课程设计实验报告实验序号:06 实验项目名称:数字签名RSA签名RSA签名核心代码说明由于在实验报告5中已经对RSA的相关代码进行了分析,这里主要给出签名和验签的代码。
在对某个二进制文件进行签名之前,我们首先需要计算其数据摘要,这里我们采用md5哈希算法,其对应的代码如下md5哈希算法在RSA的签名中,其实就是用私钥进行解密的过程,其对应的代码如下RSA签名其中解密对应的代码如下,pow函数提供了快速幂的功能RSA解密在RSA验签的过程中,其实就是用公钥进行加密的过程,其对应的代码如下RSA验签其中加密对应的算法如下RSA加密RSA签名实验结果演示首先是计算待签名文件的md5值md5结果对得到的md5值进行签名,可以得到如下的结果RSA签名结果对签名进行验签,可以发现成功验证签名验证签名ECC签名代码整体说明相关文件(ecc.py)由于在前面的ECC加解密(实验报告5)中已经对ECC的相关接口进行了介绍,这里我们不再重复。
这里主要给出签名和验签的主要流程签名的主要流程如下1.选择一个随机数k,k∈{1,2,⋯,n−1}2.计算点R(x R,y R)=kG,并记r=x R3.利用保密的解密钥d计算s=(Hasℎ(m)−dr)k−1 (mod n)4.以<r,s>作为消息m的签名,并以<m,r,s>的形式传输或者存储验签的主要流程如下1.计算s−1 (mod n)2.利用公开的加密钥Q计算U(x U,y U)=s−1(Hasℎ(m)G−rQ)3.如果x U=r,则<r,s>是用户A对m的签名ECC签名核心代码说明由于在实验报告5中已经对ECC的相关代码进行了分析,这里主要给出签名和验签的代码。
进行签名的代码主要如下,可以发现和我们上面提到的签名步骤是一一对应的ECC签名进行验签的代码如下,和上述我们提到的验签步骤也是一一对应的ECC验签ECC签名实验结果演示同RSA签名一样,我们首先需要计算文件对应的数据摘要,这里我们使用md5哈希算法md5数据摘要接着对数据摘要进行签名,得到如下的签名结果ECC签名结果对得到的签名进行验签,可以发现成功验证ECC验签五、分析与讨论1)与ECC的签名相比,RSA的签名和验签显得更为优雅,即解密对应签名,加密对应验签2)和RSA签名相比,ECC引入了随机数k,使得即使对同一个数据进行签名,产生的结果也可能不一样,这在一定程度上增加了ECC签名的安全性3)与传统的分组密码相比,使用公钥密码实现数字签名非常方便且更加安全。
实验四:密码学MD5实验报告
专业:计算机科学与技术班级:2015级姓名:孟亚超学号:2015040
String md5=get(exe);
long endTime =System.nanoTime();
double time=endTime-beginTime;
System.out.println("【运行结果】");
System.out.println("选择的文件是: "+exe.getName());
System.out.println("该文件MD5值: "+md5);
System.out.println("计算MD5用时: "+(time/1000000)+"毫秒");
}
}
程序运行结果截图
实验结果分析
我们不难发现,这两个EXE文件虽然内容不同,但是MD5值却是相同的!
MD5,用于确保信息传输完整一致。
是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。
MD5算法实验报告08信息管理与信息系统班20081000466 李静珩一、【实验目的】:验证MD5加密算法。
二、【实验采取的数据及运行过程】:1.MD5生成文件摘要(1)本机进入“工具箱”|“加密解密”|“MD5哈希函数”|“生成摘要”页签,在明文框中编辑文本内容:深圳大学生运动会。
单击“生成摘要”按钮,生成文本摘要:b5c7082a1e4c9c376c6f604c9056fe12。
单击“导出”按钮,将摘要导出到MD5共享文件夹(D:\Work\Encryption\MD5\)中,并通告同组主机获取摘要。
(2)单击“导入摘要”按钮,从同组主机的MD5共享文件夹中将摘要导入。
在文本框中输入同组主机编辑过的文本内容,单击“生成摘要”按钮,将新生成的摘要与导入的摘要进行比较,验证相同文本会产生相同的摘要。
(3)对同组主机编辑过的文本内容做很小的改动,再次生成摘要,与导入的摘要进行对比,验证MD5算法的抗修改性。
2.MD5算法本机进入“工具箱”|“加密解密”|“MD5哈希函数”|“演示”页签,在明文输入区输入文本(文本不能超过48个字符),单击“开始演示”,查看各模块数据及算法流程。
输入明文:shanghai expo开始演示后的明文分组:7368616E67686169206578706F8000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000068子明文分组:7368616E、67686169、20657870、6F800000、00000000、00000000、00000000、00000000、00000000、00000000、00000000、00000000、00000000、00000000、00000000、00000068 摘要:84C17AD6271C6C109BA3AB9A5C1F717E初始链接变量:A.01234567B.89ABCDEFC.FEDCBA98D.76543210经操作程序后的链接变量:A.F32EC094B.89ABCDEFC.FEDCBA98D.76543210逻辑函数:F(x,y,z)=(x&y)|(~x&z)(89ABCDEF&FEDCBA98)|(~ 89ABCDEF&76543210)= FEDCBA98第2、3、4轮用软件实现。
密码学实验
——计算文件MD5值
姓名:
班级:
学号:
教师:
助教:
【1】Hash算法实验
(1)MD5\SHA1\SHA-256算法比较
A.【相同点】MD5,SHA1,SHA-256属于密码级散列函数,算法相对比较复杂,参与加密算法的过程中时也
比较安全,三者都是属于哈希算法一类,都是任意长
度的消息压缩到某一固定长度的消息摘要的函数B.【不同点】
MD5输出128bit
SHA1输出160bit
SHA256输出256bit
①普通密码可以用MD5,但数字证书和数字签名就法
定必须用SHA256
②MD5比SHA1快,SHA1比MD5强度高
C.截图
(2)相同与相似字符串MD5差异比较
【2】Hash算法过程与填充方式
【常见Hash算法的数据填充方式】
1.首位填充1,后面填满0位;【即:先补一个1,然后再补
0,直到长度满足对512取模后余数是448。
】
2.补长度;【通常用一个64位的数据来表示原始消息的长度。
如果消息长度不大于2^64,那么第一个字就是0;如果原始的消息长度超过了512,我们需要将它补成512的倍数。
然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要】
【3】计算文件MD5值
1.源代码【hello.exe\erase.exe文件放在其中的src文件夹中】package com.topcheer;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
publicclass EXEMD5 {
/*设置MD5值输出为16进制(从0到F)*/
protectedstaticchar hexDigits[] = { '0', '1','2', '3', '4', '5', '6', '7', '8', '9','A', 'B', 'C', 'D', 'E', 'F'};
/*获取MD5算法,并判断是否存在MD5算法(判断是否正确导入了加密库)*/
protectedstatic MessageDigest messagedigest = null;
static{
try {
messagedigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
/*计算文件(包括EXE文件)MD5值的算法*/
publicstatic String getFileMD5String(File file) throws IOException{ FileInputStream in = new FileInputStream(file);
FileChannelch =in.getChannel();
MappedByteBufferbyteBuffer
=ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length()); messagedigest.update(byteBuffer);
return bufferToHex(messagedigest.digest());
}
/*将字节数组转换为字符串类型*/
privatestatic String bufferToHex(byte bytes[]){
return bufferToHex(bytes, 0,bytes.length);
}
/*将字节数组从第m位元素到第n位元素的部分转换成字符串类型*/ privatestatic String bufferToHex(byte bytes[], int m, int n){ StringBufferstringbuffer =new StringBuffer(2 * n);
int k = m + n;
for (int l = m; l< k; l++) {
appendHexPair(bytes[l], stringbuffer);
}
return stringbuffer.toString();
}
privatestaticvoid appendHexPair(byte bt, StringBufferstringbuffer) { char c0 = hexDigits[(bt& 0xf0) >> 4];
char c1 = hexDigits[bt& 0xf];
stringbuffer.append(c0);
stringbuffer.append(c1);
}
publicstaticvoid main(String[] args) throws IOException{ System.out.println("请选择你要计算MD5值的应用程序文件!");
System.out.println("【1】erase.exe 【2】hello.exe");
int choose=new Scanner(System.in).nextInt();
File exe=null;
if(choose==1){
exe = new File("./src/erase.exe");
}
elseif(choose==2){
exe = new File("./src/hello.exe");
}
else{
System.out.println("非法输入,请重新运行程序! ");
System.exit(0);
}
long beginTime=System.nanoTime();
String md5=getFileMD5String(exe);
long endTime =System.nanoTime();
double time=endTime-beginTime;
System.out.println("【运行结果】");
System.out.println("选择的文件是: "+exe.getName());
System.out.println("该文件MD5值: "+md5);
System.out.println("计算MD5用时: "+(time/1000000)+"毫秒");
}
}
2.程序运行结果截图
【结论】
我们不难发现,这两个EXE文件虽然内容不同,但是MD5值却是相同的!。