版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计报告课程名称:基于非对称密码体系的数据加密解密(RSA)时间:2016.11.21-2016.11.25目录一、背景3二、RSA算法52.1算法描述52.2 模算术里的求幂运算62.3用公钥进行有效运算72.4用私钥进行有效运算7三、软件的设计83.1软件总体设计83.2软件详细设计93.3类与主要函数113.4主要代码11四、运行与调试154.1运行效果154.2调试问题17五、经验与总结175.1心得与体会175.2致谢17六、参考文献17一、背景随着计算机信息技术的蓬勃发展,作为信息采集、存储、处理和传输的媒体,计算机及网络应用逐步延伸到社会生活的方方面面。当人类越来越感受到计算
2、机系统功能的强大,不得不感叹于信息技术带来的方便快捷的同时,各种忧虑也渐渐产生:已经习惯性依赖于计算机的人们离开它还能生存吗?信息战将对国防安全、军事领域产生什么影响?信息诈骗和其他信息犯罪将如何改变人们的日常生活? 这些问题都属于计算机信息安全的范畴。起初,计算机系统的安全主要是指硬件的安全保护。随着信息所发挥的价值日益为人们所了解,人们的目光转移到在计算机系统中存储、传输的信息的安全,包括防止信息泄漏和非法慕改等。数据库集中存放和管理大量信息,其安全性对于整个计算机信息系统至关重要。为了保证数据安全,人们在不同层面运用了各种安全措施,这些防范措施分别可以在一定程度上防止某种安全威胁。但是,
3、在操作系统、数据库和网络的层层防护之下,仍然无法保证数据库数据的安全。因为通常数据库中的数据最终是以文件形式存储在计算机上的,这些文件大部分是多个用户可读可写的,一旦网上黑客通过某种途径进入系统就可以直接读取数据文件或存储介质,从中窃取数据或利用非法软件篡改数据库文件内容。信息的传输则通过公共信道。这些计算机系统和公共信道是不设防的,是很脆弱的,容易受到攻击和破坏,信息的丢失不容易被发现,而后果是极其严重的。如何保护信息的安全已不仅仅是军事和政府部门感兴趣的问题,各企事业单位也愈感迫切。而密码是有效而且可行的保护信息安全的办法,有效是指密码能够做到使信息不被非法窃取,不被篡改或破坏,可行是说它
4、需要付出的代价是可以接受的。因此密码学的研究就成为一个重要的来解决信息安全问题的一种手段了,而且有着重要的地位。二、RSA算法2.1算法描述Diffie和Hellman在其早期的论文DIFF76B中提出了一种新的密码学方法,事实上,它对密码学家提出了一种挑战,即要求寻找满足公钥体制要求的密码算法。之后很多算法被提出,其中有一些刚提出时似乎很有前途,但后来都被攻破。MIT的Ron Rivest,Adi Shamir和Adleman于1977年提出并于1978年首次发表的算法RIVE78,可以说是最早提出的成功的公钥算法之一。Rivest-Shamir-Adleman(RSA)算法自其诞生之日起就
5、称为比广泛接受且被实现的通用的公钥加密方法。经过多年的分析和研究,在众多的公开密钥加密算法中,RSA加密算法最受推崇,它也被推荐为公开密钥数据加密标准。由数论知识可知,若将一个具有大素数因子的合数进行分解是很困难的,或者说这个问题的计算量是令人望而生畏的,而RSA加密算法正是建立在这个基础上的。在RSA加密算法中,个用户A可根据以下步骤来选择密钥和进行密码转换:(1)随机的选取两个不同的大素数p和q(一般为100位以上的十进制数),予以保密;(2)计算n=p*q,作为用户A的模数,予以公开;(3)计算欧拉(Euler)函数z=(p-1)*(q-1),予以保密;(4)随机的选取d与z互质,作为A
6、的公开密钥;(5)利用Euclid算法计算满足同余方程e*d1modz的解d,作为用户A的保密密钥;(6)任何向用户A发送信息M的用户,可以用A的公开模数D和公开密钥e根据C=Me mod n得到密文C;2.2 模算术里的求幂运算在RSA中,加密和解密都需要计算某整数的模n整数次幂,如果先球场整数的幂,在对n取模,那么中间结果会非常大。幸运的是,正如前面的例子所示,我们可利用模运算的下列性质来计算模幂运算:(a mod n)*(b mod n)mod n = (a*b) mod n这样我们将中间结果对n取模,这样使得计算切实可行。因为RSA中所用到的指数很大,所有还应考虑幂运算的效率问题。为说
7、明如何增加效率,以计算x16为例。若直接计算则需进行15此乘法:x16= x*x*x*x*x*x*x*x*x*x*x*x*x*x*x*x8 = (x)(x2)(x8),我们先计算 x mod n,x2 mod n, x8 mod n,在计算(x mod n)*(x2mod n)*+2+如果重复计算每个中间结果的平方,得到x2,x4,x8和x16,那么只需要4次乘法即可计算出x16。又比如,对于整数x和n,计算x11mod n。由于x11 = x1(x8 mod n)mod n 。1.b0,则 b =-更一般地,假定我们要计算ab,其中a和b是正整数。若将b表示为二进制数bkbk2.3用公钥进行
8、有效运算为了加快RSA算法在使用公钥时的运算速度,通常都会选择一个特定的e,大多数情况下选e为65 537(216+1),另外两个常用的选择是3和17。这些指数里都只有两个位,所以求幂运算时需要的乘法次数极小化了。然而,若指数太小,如e = 3,RSA 甚至会遭受一些简单的攻击。假设有三个不同的RSA用户,他们都使用指数e=3,但他们的模数n却各不相同,即n1,n2,n3.现在有一个用户A以加密方式给他们三个发送了相同的消息M,则三个密文为:C1 = M3 mod n1 ,C2 = M3 mod n2,C3 = M3 mod n3。很有可能n1,n2,n3是两两互素的,所以运用中国剩余定理(C
9、RT)可以计算出M3 mod (n1n2n3)。根据RSA的规则,M应该比模数n要小,所以有M3 < (n1n2n3),从而攻击者只需要计算出M3的三次立方根就可以了。2.4用私钥进行有效运算我们不能为了计算的效率而简单地选择一个小数值的d。D的值太小容易遭受穷举攻击和其他形式的密码分析WIEN90。然而,运用中国剩余定理可以加快运算速度。我们希望计算M = Cd mod n。先定义一些中间结果:Vp=Cd mod p三、软件的设计3.1软件总体设计概要:运用Java编写出一个加密和解密的密钥对一段明文进行加密和解密来达到隐秘的传送信息的目的,运用RSA非对称密码算法和系统来完成整个设计
10、要求经过上面论述,我们可以将对软件的要求总结如下: 可以按要求的位数生成非对称密钥。 可以保存密钥和装载密钥,将他们拿来加解密 。 可以用指定密钥以RSA算法加密任意一个文件,加密生成的数据为纯文本。 提示信息完整、操作舒适、图形界面雅观按上述描述,各层的关系如下:根据以上分析,一般来说,需要进行编码的程序有RSA密钥生成 RSA加密解密 对数据进行加密解密操作各环节必要的数据编码转换 图形操作界面。3.2软件详细设计程序结构示意图:界面原型:3.3类与主要函数Privatekey 私钥类publicKey 公钥类RSAGeneratorKey 产生N,私钥,公钥的类3.4主要代码packag
11、e com.py.model;import java.math.BigInteger;import java.security.SecureRandom;import java.util.Date;public class RSAGeneratorKey private static BigInteger x; / 存储临时的位置变量x,y 用于递归private static BigInteger y;/ 欧几里得扩展算法public static BigInteger ex_gcd(BigInteger a, BigInteger b) if (Value() = 0) x =
12、new BigInteger("1");y = new BigInteger("0");return a;BigInteger ans = ex_gcd(b, a.mod(b);/ 由于我们只求乘法逆元 所以这里使用BigInteger.One,实际中如果需要更灵活可以多传递一个参数,表示模的值来代替这里x = x.multiply(BigInteger.ONE.divide(gcd);k = k.abs();BigInteger ans = x.mod(k);if (pareTo(BigInteger.ZERO) < 0)ans = ans.ad
13、d(k);return ans;public static RsaKeyPair generatorKey(int bitlength) SecureRandom random = new SecureRandom();random.setSeed(new Date().getTime();BigInteger bigPrimep, bigPrimeq;while (!(bigPrimep = BigIbablePrime(bitlength, random).isProbablePrime(1) continue;/ 生成大素数pwhile (!(bigPrimeq =
14、BigIbablePrime(bitlength, random).isProbablePrime(1) continue;/ 生成大素数qreturn new RsaKeyPair(publicKey, privateKey);package com.py.action;import com.py.model.RSAGeneratorKey;import com.py.model.RsaKeyPair;public class Dealaction RsaKeyPair keyPair = RSAGeneratorKey.generatorKey(256);public
15、interface CallBack / 为了不拖累主线程public void getResutl(String publickey, String privatekey, String N);).start();package com.py.tool;import java.io.UnsupportedEncodingException;BigInteger encrypted = temp.modPow(key.getB(), key.getN();return Base64.encodeBase64String(encrypted.toByteArray();四、运行与调试4.1运行效果4.2调试问题在调试过程中遇到很多问题,比如如何生成那个大素数,到底应该多少位才比较合适,然后一直在思考,最后用了bigInteger来解决,bigInteger这个类提供了很多好的数据位操作的方法,很实用。五、经验与总结5.1心
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度山西省高校教师资格证之高等教育法规全真模拟考试试卷A卷含答案
- 2023年冷墩钢投资申请报告
- 金融岗位招聘笔试题及解答(某大型央企)2024年
- 2025年教师资格考试小学面试社会试题及解答参考
- 2024专业运动服装订货协议
- 2024年油品储备设施租赁协议范本
- 2024年度建筑项目施工责任担保协议
- 2024年楼宇外墙面刷新工程协议样本
- 2024商铺转租协议格式
- 文书模板-竞业协议核实流程
- 重庆12.23特大井喷案例
- 围手术期重症监护
- CMK公式(设备能力指数EXCEL自动计算)
- 大作业计算机网络
- 鲁班尺各标准吉凶数对照表
- 西南油气田对外合作项目基于PSC谈判经济评价
- 基于PLC的药片自动装瓶控制系统设计
- 微生物限度方法学验证
- 迁入街道公共集体户承诺书
- 湖北农业发展的现状与问题分析
- 镇江市内河航道网规划
评论
0/150
提交评论