西北农林科技大学信息安全实验三
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息工程学院
信息安全原理及应用实验报告实验三基于RSA的公钥加密
班级:计算机XX
学号:XXXXXXX
姓名:XXXXX
指导老师:XXXXX
一、实验目的
1.理解公钥密码算法,熟悉常用密码算法:RSA、椭圆曲线密码体制;
2.理以RSA加密算法为例,掌握公钥密码算法加解密过程的实现。
二、实习内容
1.[基本要求]
以RSA为例,利用java中的相关类实现对指定字符串的加解密。
2.[实现提示]
(1) 可以利用java中的KeypairGenerator类创建公钥密钥对,工厂类KeypairGenerator的静态方法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.测试数据:
明文:Hello UserB !
e = 65537
n = 901555080980479054261289117105730288186307404340275543727489749127530630 35513699150577829243362139796437472252024998435422860371393397734043000574146477 68543333727492209741866234257107358707242966203478045985545791031927570585306342
8389277947471782777251917943575355289890002087854701934153204294157020784747 2.预测结果:
m =112538405354885716280897067137139232297231576752176647999066079730260155 78815420520321236527400219496525363940515236822159671810260812132516608590481840 36758521893489581581433386918313849576468061274982515391027453264874832020421683 3296167081023385937007859365228073517478723018190901085831856225136435773586
d = 252072803208665306472433309151248940304345589165375422482910755191920156 10460549357388774937140361164379209325207227540636411392731016373630223271139357 26016089834784661822455773549939997197024299291618449630366974385474683592001671 7183151204857451734643665107085662188516607520806177363202710556814157473153
n = 901555080980479054261289117105730288186307404340275543727489749127530630 35513699150577829243362139796437472252024998435422860371393397734043000574146477 68543333727492209741866234257107358707242966203478045985545791031927570585306342 8389277947471782777251917943575355289890002087854701934153204294157020784747
解密:Hello UserB !
四、算法分析和流程图
1、RSA算法的加密解密
基础过程分为三个:生成RSA公钥和私钥、使用公钥加密、使用密钥解密。
1.1生成RSA公钥和私钥
Java 的KeyPairGenerator 类提供了一些方法来创建密钥对以便用于非对称加密,密钥对创建好后封装在KeyPair 类型的对象中,在KeyPair 类中提供了获取公钥和私钥的方法。具体步骤如下:
1.1.1创建密钥对生成器
KeyPairGenerator kpg=KeyPairGenerator.getInstance("RSA");
1.1.2初始化密钥生成器
kpg.initialize(1024);
对于密钥长度。对于RSA 算法,这里指定的其实是RSA 算法中所用的模的位数。可以在512 到2048 之间。
1.1.3生成密钥对
KeyPair kp=kpg.genKeyPair( );
一对公钥和私钥的信息。
1.1.4获取公钥和私钥