当前位置:首页 > 免费毕业设计

基于JAVA的RSA文件加密软件的设计与实现源代码+L

基于JAVA的RSA文件加密软件的设计与实现源代码+L

  • 网站价格: 2元
  • 特殊技术: java
  • 作品类型: 免费毕设
  • 售后服务: 毕业设计

联系方式: 微信:biyebang QQ: 629001810

作品详情

 标题:基于JAVA的RSA文件加密软件的设计与实现源代码+论文

价格:2元
类型:免费毕设
 
 
目录

 


系统设计

2.1.1 功能分析

经过1.2.2节的论述,我们可以将对软件的要求总结如下:

可以按要求的位数生成非对称密钥。

可以保存密钥和装载密钥,密钥保存为纯文本。

可以用指定密钥以RSA算法加密任意一个文件,加密生成的数据为纯文本。

可以装载加密过的文件,并用指定的密钥解密还原出原文件。

提示信息完整、操作舒适、图形界面雅观

按上述描述,给出Use CaseStatechart如图2-1

2.1.2 工程方案选择

结合现有的常见开发模式综合分析,有多种实现方案,下面陈述其中几种,并分析选择一种解决方案,并给出工程框架。

1. 整个工程使用java平台实现

RSA密钥生成、RSA加密解密的功能实现十分简单,因为标准库中集成几乎所有功能,不需要从RSA算法出发进行编码。在j2se标准库中,javax.crypto中的Cipher类用于具体的加密和解密,java.security包直接提供了数字签名的相关方法。因为有强大的标准库支持,文件的读取和保存操作、各环节必要的数据编码转换、图形操作界面的实现也很简单(使用java.io java.awtjavax.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算法出发编码实现。其他各功能的设计开发,如文件操作、数据编码转换和图形界面等,可以使用ATLMFCWindows API实现。这种工程几乎是为Windows量身订做,执行效率最好。但是对于非PC设备,只能方便的移植到运行Windows嵌入式操作系统的设备,向其他操作系统移植困难,需要重新编写大量代码。通常解决本地化代码的移植问题,都是使用C++标准库,即功能尽量多的由C++标准库完成,这样在移植的时候,只需要重新编写操作系统相关的代码即可。这种开发方式比起前两种,缺点就是设计开发模式陈旧,代码烦琐,不方便维护;流行的.Net上的语言引用各种功能比较麻烦。

4. 考虑可能的复用,针对具体情况分层开发实现

综合考虑复用性、可维护性和执行效率,较妥当的方法是分层设计。核心的RSA

法由C++类库实现,针对用户所在的操作系统封装成本地化组件。其他各功能如文件操作、数据编码转换和图形界面等,由托管代码借助虚拟机平台标准库的功能快速开发实现(本文针对选用.Net上的C#论述,选用javaJNI或其他方式调用本地组件,设计模式上是完全类似的)。这种开发方式,核心功能集中在最底层,在不断的封装中针对具体环境对组件功能不断扩充,任意一个层面的封装都可以被直接应用到其他项目,比如在Web使用以前为某窗体程序写的组件、给嵌入式设备交叉编译算法库等。但是每一层都需要依赖底层的所有组件。图2-2形象的说明了分层设计给复用带来的好处。

观察上述算法,发现E根据奇偶除以二或减一除以二实际就是二进制的移位操作,所以要知道需要如何乘模变量,并不需要反复对E 进行除以二或减一除以二的操作,只需要验证E 的二进制各位是0 还是1 就可以了。同样是计算,下面给出从右到左扫描二进制位进行的幂模算法描述,设中间变量D,P,E的二进制各位下标从左到右为u,u-1,u-2,…,0

Powmod(C,E,n)

{

        D=1;

        P=C mod n;

        for i=0 to u do

          {

              if(Ei=1)D=D*P(mod n);

             P=P*P(mod n);

        }

   return D;

}

有些文献将上述算法称为平方乘积二进制快速算法,例如参考文献中的《基于RSA算法的一种新的加密核设计》,其实这种算法本质上和图2-4的流程完全一致,只是把根据指数奇偶分开的减一和除以二合并成对指数二进制各位的判断而已。在本软件的代码中采用直接扫描vlong二进制各位的办法。

剩下的问题就是乘模运算了。提高乘模运算的速度是提高模幂运算速度的关键。一般情况下,n是数百位乃至千位以上的二进制整数,用普通的除法求模而进行乘模运算是不能满足速度的要求的。为此,Montgomery1983年提出了一种模加右移的乘模算法(主要著作发表于1985年),从而避免了通常求模算法中费时的除法步骤。本软件仅仅是应用Montgomery(蒙哥马利)算法,算法的具体推导证明需要颇多数论知识,不在本文的讨论范围内,如需了解可参见蒙哥马利的相关著作。下面简单描述RSA中常用的Montgomery(蒙哥马利)算法供参考理解源程序。

选择与模数n互素的基数R=2kn满足2k1n<2k n为奇数。并且选择R-1n,满足0< R-1<n, 0< n<n,使得 RR-1-nn1。对于0m<Rn的任意整数,Montgomery给出求模乘法mR-1 mod n 的快速算法M(m):

M(m)

{

 

if (tn) return (t-n);

else return t;

}

因为,故t为整数;同时,得。由于M(m) t结果范围是0t<2n,返回时如果t不小于n,应返回t-n

本软件程序中,RSA核心运算使用的乘模算法就是 M(A*B)。虽然M(A*B)并不是乘模所需要的真正结果,但只要在幂模算法中进行相应的修改,就可以调用这个乘模算法进行计算了。本软件起初未使用Montgomery 乘模算法时,加密速度比使用Montgomery乘模算法慢,但速度相差不到一个数量级。

将上述乘模算法结合前面叙述的幂模算法,构成标准Montgomery幂模算法,即本软件所使用的流程,叙述如下。

M(m)

{

k = ( m * n’ ) mod R;

x = (m + k*n ) / R;

   if (x>=n) x -= n;

return x;

}

exp(C,E,n)

{

       D=R-n;

       P=C*R mod n;

i=0;

       while(true)

          {

              if(E的当前二进制位Ei==1)D=M(D*P); //从低位到高位检测二进制位

i+=1;

if(i==E的二进制位数)break;

             P=M(P*P);

        }

   return D*R-1 (mod n);

}

在具体的实现中,对应monty类的mulexp方法。全局函数modexp初始化monty对象并调用其exp方法,使用的时候直接调用modexp即可。

帮我毕业网微信

版权所有© 帮我毕业网 并保留所有权利

QQ 1370405256 微信 biyebang

QQ:629001810微信:biyebang

收缩