密码学实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《信息安全导论》
实验报告
实验名称:密码学实验
学员姓名:杨毅学号:201406043013 培养类型:科学和工程技术类专业:信息安全
所属学院:计算机学院年级:2014级
指导教员:赵文涛职称:教授
所属单位:计算机学院网络工程系
计算机学院网络工程系制
1、实验名称
密码学实验
2、实验简介
基于Crypto++库的加密程序设计。通过搭建基于Crypto++库调用的环境,来完成文件加密,文件完整性检测,数字签名这一系列功能。
Crypto++ 库是一个用c++ 编写的密码类库,是一个得到广泛应用的开源软件,提供了密码学中的大多数加密算法,算法可靠,接口丰富易用。
密码学中的加密分为对称加密和非对称加密。常见的对称加密算法有AES算法和DES算法,对称加密采用唯一的密钥,加密和解密都用同一密钥,特点包括操作检测,速度快,适合大规模文件的加解密。由于RSA计算过程进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,所以这里我采用DES算法。
密码学中的完整性检测依靠的是哈希(Hash)算法,又称三列算法。哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式,常用的哈希算法包括MD5,SHA-0,SHA-1等。这里我采用MD5。
数字签名同样依靠非对称加密算法,正如我所用的RSA算法,与加密时不同的是,签名时,发送方用自己的私钥对文件进行加密,当接收方接收到文件后,再用发送方的公钥对文件进行解密。
3、实验设计
3.1总体设计。
按照实验指导书上的指导,跟着步骤走完成安装实验环境和配置Crypto++,接着操作与使用Crypto++库完成文件加解密、文件完整性检测、数字签名程序的编写,并运行截图。再实现文件加密、完整性检测、数字签名等多种功能的组合,以便于可以方便调用三种功能。
,
3.2功能设计。
先将三种功能分别实现,继而将三种功能放在一起方便使用。
3.3代码设计。
3.3.1先确定需要用的各种头文件,并在include后面设置命名空间,引用Crypto++库。如下图1
图1 添加头文件,命名空间,库
3.3.2DES算法的主要难度相对较小,主要代码在于以二进制打开文本,进行读取加密解密。主要代码布置如图2
图2 DES算法主要代码
3.3.3MD5算法难度也不大,我编写的主要代码如下图3所示
图 3 MD5算法主要代码
3.3.4 RSA算法是我认为最难的,我将其代码主要分为一下几部分编写:
生成RSA密钥对、加密、解密、签名、检验签名如下图4、5、6、7所示。
图4生成RSA密钥对
图5加密
图6解密
图7签名及验证签名
3.3.5主要借助循环来完成各种功能的调用如图8所示。
图8综合应用
4、实验结果及分析
4.1搭建基于Crypto++库调用的环境。
这一项目比较简单,只需要按照实验指导书上的步骤走即可在调试项目时第一次会报错,但第二次在\crypto562\win32\Output\Release目录下生成cryptlib.lib文件,具体原因未知,其余步骤一切正常。
4.2文件加密
采用操作检测,速度快,适合大规模文件的加解密的对称性算法DES 算法,编写程序并运行截图如下图10所示。在程序完成后的调试中,我首调试便无法通过如下图9。经过仔细的探研,终于发现因为挪用过CryptoPP文件夹,导致自己的二进制目标文件夹输入错误,致死无法运行。
前期,我完成了第一个程序,输出TXT文件如下图11;后根据教辅的资料编程程序输出如图12所示。
图9目标文件错误
图10文件加密(DES算法)
图11 第一截图
图12.DES输出第二截图
4.3完整性检测
借助哈希算法(MD-5)完成文件完整性检测,编写程序并运行,且截图如下图12所示。借助于资料终于完成程序编写,但显示“CryptoPP”中无成员“FileSource”,如图11所示。经过多方发现终于知道资料并不一定就对,在加入头文件“#include
图11 缺乏头文件的报错
图12文件完整性检测(MD-5)
4.4数字签名
依靠非对称性算法(RSA算法)编写程序。运行并截图如下图5所示。生成RSA 密钥对,加密,解密,签名,验证签名
图13 数字签名(RSA)
4.5进阶综合运用
这里有三个cpp文件调用,用起来的很不方便。我们可以用一个程序来实现,
是用户更方便。
图14综合应用运行图
5、实验总结
这是我第一次学习专业课的学习,我感到十分的激动。在本次试验中,全面运用我们所用的编程能力,极大地提升了我的编程能力,让我深刻地知道自己编程能力的不足。编写时间消耗比较长,并且接住了各种网上及老师所给的资料才得以完成本次实验。在本单元中,我们了解到信息安全的重要,也切实体会到了用自己所学的编程学知识来完成现实问题得快乐。虽然这次试验我完成的不是十分优秀,也在实验中遇到很多问题,但在经过长时间的完善发现,终于完成实验,成功搭建了实验环境,完成了目标程序。
在编程中,我偶然发现一旦删除“stdafx.cpp”后,便总是报错。本来我以为那只是个无用的cpp文件,再添加新的cpp文件时我把第一个DES算法和这个cpp文件一起移除,后则么也无法完成。后教辅告诉我要添加进去,但有点遗憾,我至今仍不知到那有什么作用。
对本实验,我可以改进的发面有很多,比如:综合灵活应用三种功能;
实现GUI图形化程序界面,增添用户的友好性;结合各个加密算法的特点(比如速度,密钥分发机制等),基于特定的应用背景来设计实验,比如局域网聊天内容的加密传输。