rsa加密算法的分析及程序实现.doc

约28页DOC格式手机打开展开

rsa加密算法的分析及程序实现,rsa加密算法的分析及程序实现页数:20字数:2747rsa加密算法的分析及程序实现1.rsa算法描述:密钥对的产生:根据用户输入的p和q的范围(size)随机产生两个大素数,p 和q 。计算:n = p * q ,然后随机选择加密密钥e,并根据e得出解密密钥d,要求 e 和 ( p - 1 ) * ( q - 1 )...
编号:10-63736大小:121.00K
分类: 论文>其他论文

内容介绍

此文档由会员 usactu 发布

RSA加密算法的分析及程序实现


页数:20 字数:2747


RSA加密算法的分析及程序实现
1.RSA算法描述:
密钥对的产生:根据用户输入的p和q的范围(size)随机产生两个大素数,p 和q 。计算:n = p * q ,然后随机选择加密密钥e,并根据e得出解密密钥d,要求 e 和
( p - 1 ) * ( q - 1 ) 互质,e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) ),其中数e和n是公开密钥,数d和n 是私有密钥。
加密和解密:对明文m进行加密时,首先把m转换为字节(按照平台缺省的字符编码方式),得到对应的数字形式num,然后对num进行加密,对应的密文是:
c = num ^ e ( mod n );解密时作如下运算:mi = c ^ d ( mod n ),再把mi 转化为对应的字符形式即可得到明文。
2.编程实现:
在编程语言的选择上,我选择了用Java来实现 ,主要是因为RSA的安全性依赖于大数分解困难,公钥和私钥都是两个大素数的函数。而Java的math包中的BigInteger类可以很方便地处理不变的任意精度的整数。从而为RSA加密解密的实现提供了很大的方便。
3.Java.math.BigInteger类简介:
主要对本次实验中用到的一些方法作一些介绍:( 选自Java API )
public BigInteger ( int bitLength, int certainty, Random rnd )
构造函数。返回一个指定 bitLength (可能是一个素数)的随机选择的 BigInter 。参数 certainty 是一个对调用者愿意忍受的不确定性的度量:该数是素数的概率将超过
1 – ( 1/2 ) ** certainty 。执行时间正比于确定性参数的值。用给定的随机数发生器选择进行素数测试的候选数。如果 bitLength <2 ,则抛出 arithmeticexception。
public BigInteger ( String val ) throws NumberFormatException
构造函数。把一个字符串翻译为 BigInteger ,该字符串包含可选的负号,后面跟着一个或多个十进制数字序列。字符到数字的映射是由 Character.digit 提供的。任何外部字符 (包括空白符) 将导致 NumberFormatException 异常。
public int compareTo ( BigInteger val )
根据该数值是小于、等于、或大于 val 返回 -1、0 或 1 。该方法在六个逻辑比较运算符 (<, = , > , >= , != , <= ) 的操作中作为首选方法。
public boolean equals ( Object x )
如果 x 是一个 BigInteger 并且等于该数则返回 true 。 提供该方法的目的是使 BigIntegers 可以作为散列码关键字使用。
public String toString ( )
返回表示该数的字符串,基数为 10 。 使用由 Character.forDigit 提供的数字到字符的映射,并且如果合适的话,还可以前置一个负号。 该表示法同 (String) 构造子兼容,并