武汉大学应用密码学RSA加密解密大作业

武汉大学应用密码学RSA加密解密大作业

ID:47103015

大小:46.00 KB

页数:7页

时间:2019-08-03

武汉大学应用密码学RSA加密解密大作业_第1页
武汉大学应用密码学RSA加密解密大作业_第2页
武汉大学应用密码学RSA加密解密大作业_第3页
武汉大学应用密码学RSA加密解密大作业_第4页
武汉大学应用密码学RSA加密解密大作业_第5页
资源描述:

《武汉大学应用密码学RSA加密解密大作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、1对RSA算法的理解RSA加密算法是一种非对称加密算法,它基于一个非常简单的数论思想:“将两个素数乘起来是很容易的,但是分解该乘积是非常困难的”。1.1加解密步骤(1)生成公钥和私钥a)随机生成两个不相等的大素数p和q,计算N=p*q;b)根据欧拉函数,求出φ=(p-1)*(q-1);c)选择一个小于r的整数e,求e关于r的模反元素d使得e*dmodφ=1得到公钥,私钥(2)加密给定明文m,公钥,计算密文c=me(N)。(3)解密给定密文c,私钥,计算明文m’=cd(N)。1.2素性检验RSA算法的实现难点之

2、一是生成大素数,这就需要生成一个大数并对其进行素性检验。素性检验有很多种方法。其中包括确定性方法和随机方法。确定性方法有试除法(埃拉托斯特尼筛法),卢卡斯-莱默检验法和AKS素数测试。常见的随机方法有费马素性检验,米勒-拉宾检验和欧拉-雅科比测试。本次作业采用就是米勒-拉宾检验方法。米勒-拉宾(MillerRabin)算法原理:要测试N是否为素数,首先将N-1分解为2sd。在每次测试开始时,先随机选一个介于[1,N-1]的整数a,之后如果对所有的r∈[0,s-1],若admodN≠1且a2^rdmodN≠1,则N是合数。否则,N有3/4的概率为素数

3、。1.3安全问题(1)公共模数攻击。每个人具有相同的r,但有不同的指数e和d,这是不安全的。(2)低加密指数攻击。如果选择了较低的e值,虽然可以加快计算速度,但存在不安全性。(3)低解密指数攻击。如果选择了较低的d值,也是不安全的。(4)选择密文攻击。如A想让T对一个T不愿意签名的消息m’签名,A首先选择一个任意值x,计算y=xe(modr),然后要求T对m=ym’签名,A最后计算(mdmodr)x-1modr=(ym’)dx-1modr=m’dmodr。还有一些不是直接对RSA的算法本身进行的攻击,如中间人攻击、时间攻击、边信道攻击等。2.具体实

4、现2.1函数说明voidProducePrime(JTextFieldprime):使用JAVA的Biginteger生成512位的大数,再用MillerRobin算法检验是否是素数。参数prime即为生成的大素数。booleanMillerRobin(BigIntegern):用MillerRobin检验判断大数n是否是素数。BigIntegermodex(BigIntegera,BigIntegerb,BigIntegern):模幂运算,计算abmodnBigIntegerinverse(BigIntegera,BigIntegerb):求逆运

5、算,计算a-1(b)StringEncode(StringPlaintext,BigIntegern,intnLen,intm,JTextFielde):加密,用公钥(n,e)对明文Plaintext加密。StringDecode(StringCiphertext,BigIntegern,intm,JTextFieldd):解密,用私钥d对密文Ciphertext解密。2.1JAVA代码importjava.math.BigInteger;importjava.util.Random;importjava.util.Scanner;importja

6、vax.swing.JTextField;publicclassRSA{publicstaticvoidmain(String[]args){Strings;JTextFieldp=newJTextField(35);JTextFieldq=newJTextField(35);JTextFielde=newJTextField(35);JTextFieldd=newJTextField(35);ProducePrime(p);ProducePrime(q);BigIntegerpp=newBigInteger(p.getText());BigInt

7、egerqq=newBigInteger(q.getText());BigIntegeroo=(pp.subtract(newBigInteger("1"))).multiply(qq.subtract(newBigInteger("1")));BigIntegeree;do{ee=newBigInteger(100,newRandom()).mod(oo);}while(MillerRobin(ee)==false);e.setText(ee.toString());d.setText(inverse(ee,oo).toString());Big

8、Integern=pp.multiply(qq);intnLen=n.bitLength();intm=(int)(Mat

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。