课程设计报告课程名称:基于非对称密码体系的数据加密解密(RSA)时间:2016.11.21---2016.11.25目录一、背景........................................................................................................................3二、RSA算法................................................................................................................42.1算法描述..........................................................................................................42.2模算术里的求幂运算.....................................................................................52.3用公钥进行有效运算......................................................................................62.4用私钥进行有效运算......................................................................................7三、软件的设计............................................................................................................73.1软件总体设计..................................................................................................73.2软件详细设计..................................................................................................83.3类与主要函数................................................................................................103.4主要代码........................................................................................................10四、运行与调试..........................................................................................................124.1运行效果........................................................................................................124.2调试问题........................................................................................................13五、经验与总结..........................................................................................................145.1心得与体会....................................................................................................145.2致谢................................................................................................................14六、参考文献..............................................................................................................14一、背景随着计算机信息技术的蓬勃发展,作为信息采集、存储、处理和传输的媒体,计算机及网络应用逐步延伸到社会生活的方方面面。当人类越来越感受到计算机系统功能的强大,不得不感叹于信息技术带来的方便快捷的同时,各种忧虑也渐渐产生:已经习惯性依赖于计算机的人们离开它还能生存吗?信息战将对国防安全、军事领域产生什么影响?信息诈骗和其他信息犯罪将如何改变人们的日常生活?这些问题都属于计算机信息安全的范畴。起初,计算机系统的安全主要是指硬件的安全保护。随着信息所发挥的价值日益为人们所了解,人们的目光转移到在计算机系统中存储、传输的信息的安全,包括防止信息泄漏和非法慕改等。数据库集中存放和管理大量信息,其安全性对于整个计算机信息系统至关重要。为了保证数据安全,人们在不同层面运用了各种安全措施,这些防范措施分别可以在一定程度上防止某种安全威胁。但是,在操作系统、数据库和网络的层层防护之下,仍然无法保证数据库数据的安全。因为通常数据库中的数据最终是以文件形式存储在计算机上的,这些文件大部分是多个用户可读可写的,一旦网上黑客通过某种途径进入系统就可以直接读取数据文件或存储介质,从中窃取数据或利用非法软件篡改数据库文件内容。信息的传输则通过公共信道。这些计算机系统和公共信道是不设防的,是很脆弱的,容易受到攻击和破坏,信息的丢失不容易被发现,而后果是极其严重的。如何保护信息的安全已不仅仅是军事和政府部门感兴趣的问题,各企事业单位也愈感迫切。而密码是有效而且可行的保护信息安全的办法,有效是指密码能够做到使信息不被非法窃取,不被篡改或破坏,可行是说它需要付出的代价是可以接受的。因此密码学的研究就成为一个重要的来解决信息安全问题的一种手段了,而且有着重要的地位。二、RSA算法2.1算法描述Diffie和Hellman在其早期的论文[DIFF76B]中提出了一种新的密码学方法,事实上,它对密码学家提出了一种挑战,即要求寻找满足公钥体制要求的密码算法。之后很多算法被提出,其中有一些刚提出时似乎很有前途,但后来都被攻破。MIT的RonRivest,AdiShamir和Adleman于1977年提出并于1978年首次发表的算法[RIVE78],可以说是最早提出的成功的公钥算法之一。Rivest-Shamir-Adleman(RSA)算法自其诞生之日起就称为比广泛接受且被实现的通用的公钥加密方法。经过多年的分析和研究,在众多的公开密钥加密算法中,RSA加密算法最受推崇,它也被推荐为公开密钥数据加密标准。由数论知识可知,若将一个具有大素数因子的合数进行分解是很困难的,或者说这个问题的计算量是令人望而生畏的,而RSA加密算法正是建立在这个基础上的。在RSA加密算法中,—个用户A可根据以下步骤来选择密钥和进行密码转换:(1)随机的选取两个不同的大素数p和q(一般为100位以上的十进制数),予以保密;(2)计算n=p*q,作为用户A的模数,予以公开;(3)计算欧拉(Euler)函数z=(p-1)*(q-1),予以保密;(4)随机的选取d与z互质,作为A的公开密钥;(5)利用Euclid算法计算满足同余方程e*d≡1modz的解d,作为用户A的保密密钥;(6)任何向用户A发送信息M的用户,可以用A的公开模数D和公开密钥e根据C=Memodn得到密文C;2.2模算术里的求幂运算在RSA中,加密和解密都需要计算某整数的模n整数次幂,如果先球场整数的幂,在对n取模,那么中间结果会非常大。幸运的是,正如前面的例子所示,我们可利用模运算的下列性质来计算模幂运算:[(amodn)*(bmodn)]modn=(a*b)modn这样我们将中间结果对n取模,这样使得计算切实可行。因为RSA中所用到的指数很大,所有还应考虑幂运算的效率问题。为说明如何增加效率,以计算x16为例。若直接计算则需进行15此乘法:x16=x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x8=(x)(x2)(x8),我们先计算xmodn,x2modn,x8modn,在计算[(xmodn)*(x2modn)*2如果重复计算每个中间结果的平方,得到x2,x4,x8和x16,那么只需要4次乘法即可计算出x16。又比如,对于整数x和n,计算x11modn。由于x11=x1(x8modn)]modn。1....b0,则b=更一般地,假定我们要计算ab,其中a和b是正整数。若将b表示为二进制数bkbk2.3用公钥进行有效运算为了加快RSA算法在使用公钥时的运算速度,通常都会选择一个特定的e,大多数情况下选e为65537(216+1),另外两个常用的选择是3和17。这些指数里都只有两个位,所以求幂运算时需要的乘法次数极小化了。然而,若指数太小,如e=3,RSA甚至会遭受一些简单的攻击。假设有三个不同的RSA用户,他们都使用指数e=3,但他们的模数n却各不相同,即n1,n2,n3.现在有一个用户A以加密方式给他们三个发送了相同的消息M,则三个密文为:C1=M3modn1,C2=M3modn2,C3=M3modn3。很有可能n1,n2,n3是两两互素的,所以运用中国剩余定理(CRT)可以计算出M3mod(n1n2n3)。根据RSA的规则,M应该比模数n要小,所以有M3(n1n2n3),从而攻击者只需要计算出M3的三次立方根就可以了。2.4用私钥进行有效运算我们不能为了计算的效率而简单地选择一个小数值的d。D的值太小容易遭受穷举攻击和其他形式的密码分析[WIEN90]。然而,运用中国剩余定理可以加快运算速度。我们希望计算M=Cdmodn。先定义一些中间结果:Vp=Cdmodp三、软件的设计3.1软件总体设计概要:运用Java编写出一个加密和解密的密钥对一段明文进行加密和解密来达到隐秘的传送信息的目的,运用RSA非对称密码算法和系统来完成整个设计要求经过上面论述,我们可以将对软件的要求总结如下:①可以按要求的位数生成非对称密钥。②可以保存密钥和装载密钥,将他们拿来加解密。③可以用指定密钥以RSA算法加密任意一个文件,加密生成的数据为纯文本。④提示信息完整、操作舒适、图形界面雅观按上述描述,各层的关系如下:根据以上分析,一般来说,需要进行编码的程序有①RSA密钥生成②RSA加密解密③对数据进行加密解密操作④各环节必要的数据编码转换⑤图形操作界面。3.2软件详细设计程序结构示意图:界面原型:3.3类与主要函数Privatekey私钥类publicKey公钥类RSAGeneratorKey产生N,私钥,公钥的类3.4主要代码packagecom.py.model;importjava.math.BigInteger;importjava.security.SecureRandom;importjava.util.Date;publicclassRSAGeneratorKey{privatestaticBigIntegerx;//存储临时的位置变量x,y用于递归privatestaticBigIntegery;//欧几里得扩展算法publicstaticB