这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的理念缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的各类系统很难达到老师的要求。
为了大家能够顺利并以最少的精力通过毕设,学长分享优质毕业设计项目,需要的自取。
目录
1.说明
分析RSA算法的应用现状,论证文件加密应用RSA算法的可行性和意义。设计一套完整实用的RSA文件加密解决方案,具体编码实现。对RSA算法进行研究,从常规RSA算法出发,用C++实现RSA加密算法类库,并在32位windows平台封装成组件。在.Net平台引用此组件,实现可以对任意文件进行RSA加密操作的窗体应用程序。经过加密的文件以及密钥文件都是文本文件。给出关键类类图、整个应用程序的结构描述文档、关键模块流程图、较详细的接口文档、所有源代码。对应用程序进行测试,对测试结果进行分析研究,进而对应用程序进行改进,对关键算法进行尽可能的优化,最终得到一个在windows运行的可以用指定密钥对任意文件进行RSA加密并可解密的完整应用程序,和一些相关的可移植组件。
2.RSA文件加密软件的设计与实现
2.1 需求分析与总体设计
2.1.1 功能分析
我们可以将对软件的要求总结如下:
① 可以按要求的位数生成非对称密钥。
② 可以保存密钥和装载密钥,密钥保存为纯文本。
③ 可以用指定密钥以RSA算法加密任意一个文件,加密生成的数据为纯文本。
④ 可以装载加密过的文件,并用指定的密钥解密还原出原文件。
⑤ 提示信息完整、操作舒适、图形界面雅观
按上述描述,给出Use Case和Statechart如图。
根据以上分析,一般来说,需要进行编码的程序有
①RSA密钥生成 ②RSA加密解密 ③任意文件的读取和保存操作 ④各环节必要的数据编码转换 ⑤图形操作界面。
2.1.2 工程方案选择
结合现有的常见开发模式综合分析,有多种实现方案,下面陈述其中几种,并分析选择一种解决方案,并给出工程框架。
1. 整个工程使用java平台实现
RSA密钥生成、RSA加密解密的功能实现十分简单,因为标准库中集成几乎所有功能,不需要从RSA算法出发进行编码。在j2se标准库中,javax.crypto中的Cipher类用于具体的加密和解密,java.security包直接提供了数字签名的相关方法。因为有强大的标准库支持,文件的读取和保存操作、各环节必要的数据编码转换、图形操作界面的实现也很简单(使用java.io java.awt或javax.swing 等包),如果结合一种快速开发的IDE,比如JBuilder,整个软件可以在很短的时间内编码完成。如果不考虑非PC设备和机器效率等问题,java平台几乎是最佳解决方案。但是缺点也很明显,如果想把核心算法和功能应用到非PC设备(例如嵌入式手持设备),则要求设备上有支持前面提及的加密类库的CVM;对于在PC上运行,JVM的数据运算速度要远远落后于本地化代码在PC上的运算速度,本软件需要进行大量运算,这一点不适合由java完成。
2. 整个工程使用.Net平台实现
与使用java平台完全类似,加密等有.Net基础类库的支持,不需要大量编码实现,另外由于Visual Studio的强大便利,这种规模的工程可以十分迅速的完成。缺点是只能在有微软.Net Framework的环境运行,在Windows操作系统,.Net Framework的机器效率好于java平台,但是相比于本地化的代码,还是十分拖沓的。
3. 整个工程使用Windows本地化程序实现
在不应用Windows或第三方现成组件的情况下,需从RSA算法出发编码实现。其他各功能的设计开发,如文件操作、数据编码转换和图形界面等,可以使用ATL、MFC或Windows API实现。这种工程几乎是为Windows量身订做,执行效率最好。但是对于非PC设备,只能方便的移植到运行Windows嵌入式操作系统的设备,向其他操作系统移植困难,需要重新编写大量代码。通常解决本地化代码的移植问题,都是使用C++标准库,即功能尽量多的由C++标准库完成,这样在移植的时候,只需要重新编写操作系统相关的代码即可。这种开发方式比起前两种,缺点就是设计开发模式陈旧,代码烦琐,不方便维护;流行的.Net上的语言引用各种功能比较麻烦。
4. 考虑可能的复用,针对具体情况分层开发实现
综合考虑复用性、可维护性和执行效率,较妥当的方法是分层设计。核心的RSA算法由C++类库实现,针对用户所在的操作系统封装成本地化组件。其他各功能如文件操作、数据编码转换和图形界面等,由托管代码借助虚拟机平台标准库的功能快速开发实现(本文针对选用.Net上的C#论述,选用java由JNI或其他方式调用本地组件,设计模式上是完全类似的)。这种开发方式,核心功能集中在最底层,在不断的封装中针对具体环境对组件功能不断扩充,任意一个层面的封装都可以被直接应用到其他项目,比如在Web使用以前为某窗体程序写的组件、给嵌入式设备交叉编译算法库等。但是每一层都需要依赖底层的所有组件。
选用第四种设计方案,上层使用C#,底层算法使用C++,可以由一个Visual Studio解决方案管理,给调试带来极大的方便。整个工程分四层,实现RSA加密算法的C++核心类库、封装C++核心类库的DLL组件、引用DLL的.Net类、实现文件操作功能的.Net窗体应用程序。
考虑到工作量,本软件加解密数据没有严格遵从RSA标准PKCS #1,而是在满足设计要求的前提下,以一种尽可能简单的方式实现加密和解密。
其他内容就不一一展示了,如需对应相关资料,可以评论或者下方联系我,私信都可以。