一、实习目的
1.理解公钥密码算法,熟悉常用密码算法:RSA、椭圆曲线密码体制;
2.以RSA加密算法为例,掌握公钥密码算法加解密过程的实现。
二、实现要求
1.实习前认真预习第6章的有关
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
;
2.熟悉java中java.security.*和java.crypto.* 中相关类。
三、实习内容
1.[基本要求]
以RSA为例,利用java中的相关类实现对指定字符串的加解密。
2.[实现提示]
(1) 可以利用java中的KeypairGenerator类创建公钥密钥对,工厂类KeypairGenerator的静态
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
getInstance()可以获得KeypairGenerator类型对象。
(2) 方法getInstance()的参数为字符串类型,指定加密算法的名称如:RSA。
(3) 利用工厂类Cipher的对象创建密码器。同样的,getInstance()的参数为字符串类型,指定加密算法的名称。
(4) JSDK1.2中只是实现了RSA密钥创建,没有实现RSA算法,因此需要安装其他加密软件提供者的软件包,才能直接使用Cipher类执行加解密。
(5) RSA算法是使用整数进行加密运算的,RSA的公钥中包含两个信息:公钥对应的整数e和用于取模的整数n。对于明文m计算密文的公式是me mod n。java中的BigInteger类中定义的modPow()方法可以计算me mod n。
(6) RSA的私钥中包含两个信息:私钥对应的整数d和用于取模的整数n。计算明文的公式是:Ce mod n。
四、实习过程
1、 生成公钥密钥对
(1)利用java中的KeypairGenerator类创建公钥密钥对,利用KeypairGenerator的静态方法getInstance()获得KeypairGenerator类型的对象,所需参数为加密算法的名称RSA。
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
(2)利用KeyPairGenerator类的genKeyPair()方法返回生成的密钥对:
KeyPair kp = kpg.genKeyPair();
(3)返回此密钥对的公钥组件的引用和私钥组件的引用
PublicKey pbkey = kp.getPublic();
PrivateKey prkey = kp.getPrivate();
2、 基于RSA的加密
RSA算法是使用整数进行加密运算的,RSA的公钥中包含两个信息:公钥对应的整数e和用于取模的整数n。对于明文m计算密文的公式是me mod n。可利用Java中的BigInteger类中定义的modPow()方法计算me mod n。
(1)读取公钥文件,并将其转换为RSA公钥。
FileInputStream f =new FileInputStream("Skey_RSA_pub.dat");
ObjectInputStream b = new ObjectInputStream(f);
RSAPublicKey pbk = (RSAPublicKey)b.readObject(); //公钥转换为RSA公钥
(2)获取公钥参数:公钥对应的整数e,用于取模的整数n
BigInteger e = pbk.getPublicExponent();
BigInteger n = pbk.getModulus();
3、 基于RSA的解密
RSA的私钥中包含两个信息:私钥对应的整数d和用于取模的整数n。计算明文的公式为:Ce mod n。
(1) 读取密方和私钥。
(2) 获取私钥参数:私钥对应的整数d和用于取模的整数n
BigInteger d = prk.getPrivateExponent();
BigInteger n = prk.getModulus();
(1) 解密
while((ctext=in.readLine())!=null){ //按行读取密文,并进行解密
BigInteger c = new BigInteger(ctext);
BigInteger m = c.modPow(d,n); //c为密方转换而来的大整数
byte[] mt = m.toByteArray();
for(int i = 0 ; i < mt.length ; i++){
System.out.print((char)mt[i]);
}
System.out.println("");
}
五、实习总结
本次实习任务基本完成,实现了用RSA算法对文件的加密及解密,但是只是完成了最基本的部分。网络通信等部分会利用其余时间进行实现。通过本次实习,进一步了解了公钥密码算法,掌握了公钥密码算法加密和解密过程的实现。对RSA非对称密码算法更加的熟悉,该算法需要一对密钥,使用其中一个加密,用另一个才能解密。同时这些我也会在以后的学习中不断练习,从而能够更熟练的掌握。