云南大学数学与统计学实验教学中心实验报告
课程名称:计算机网络实验
学期:2012-2013学年第二学期
成绩:
指导教师: 陆正福
学生姓名:卢富毓
学生学号:20101910072
实验名称:非对称密码体制
实验要求: 必做
实验学时:4学时
实验编号:
实验日期:2013/3/28
完成日期:2013/6/28
学院:数学与统计学院
专业: 信息与计算科学
年级: 2010级
一、实验目的:
通过实验掌握非对称密码体制的重要思想。
二、实验内容:
查阅资料,实现RSA密码体制的编码算法、译码算法、密钥生成算法
查阅资料,密码体制的编码算法、译码算法、密钥生成算法
三、实验环境
Win7、Eclipse
四、实验过程(请学生认真填写):
实验过程、结果以及相应的解释:
预备知识
非对称密码体制也叫公钥加密技术,该技术就是针对私钥密码体制的缺陷被提出来的。在公钥加密系统中,加密和解密是相对独立的,加密和解密会使用两把不同的密钥,加密密钥(公开密钥)向公众公开,谁都可以使用,解密密钥(秘密密钥)只有解密人自己知道,非法使用者根据公开的加密密钥无法推算出解密密钥,顾其可称为公钥密码体制。如果一个人选择并公布了他的公钥,另外任何人都可以用这一公钥来加密传送给那个人的消息。私钥是秘密保存的,只有私钥的所有者才能利用私钥对密文进行解密。公钥密码体制的算法中最著名的代表是RSA系统,此外还有:背包密码、McEliece密码、Diffe_Hellman、Rabin、零知识证明、椭圆曲线、EIGamal算法等。公钥密钥的密钥管理比较简单,并且可以方便的实现数字签名和验证。但算法复杂,加密数据的速率较低。公钥加密系统不存在对称加密系统中密钥的分配和保存问题,对于具有n个用户的网络,仅需要2n个密钥。公钥加密系统除了用于数据加密外,还可用于数字签名。
实验过程
(一)RSA加密算法
原理分析:
RSA的具体计算算法:
假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。她可以用以下的方式来产生一个公钥和一个私钥:
,p不等于q,计算N=pq。
,求得r= φ(n) = φ(p)φ(q) = (p-1)(q-1)
,求得e关于模r的模反元素,命名为d。(模反元素存在,当且仅当e与r互质)
。
(N,e)是公钥,(N,d)是私钥。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。
加密消息
假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的Unicode码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。用下面这个公式他可以将n加密为c:
计算c并不复杂。Bob算出c后就可以将它传递给Alice。
解密消息
Alice得到Bob的消息c后就可以利用她的密钥d来解码。她可以用以下这个公式来将c转换为n:
得到n后,她可以将原来的信息m重新复原。
解码的原理是
以及ed ≡ 1 (mod p-1)和ed ≡ 1 (mod q-1)。由费马小定理可证明(因为p和q是质数)
和
这说明(因为p和q是不同的质数,所以p和q互质)
注:本内容参考维基百科RSA加密算法,可能与老师说的有略微不同。
具体代码如下:
//具体实现的代码
//RSA实现时候用大数数来做比较简单
public class RSA1 {
private final static SecureRandom random = new SecureRandom();
private static BigInteger d; // 为私钥{d,n}中的d
private static BigInteger e; // 其实就是公钥<e,n>中的e
private static BigInteger n; // 为公开的 p x q
private static BigInteger p; // 需要保密的大素数 p q
private static BigInteger q;
/**
* 产生长度为N位的公钥和私钥
* ***@param N
*/
public void genKey(int N) {
// 产生两个N/2位的大素数p和q
p = (N / 2, random
非对称密码体制 来自淘豆网m.daumloan.com转载请标明出处.