下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 实验二非对称密码算法 RSA一、实验目的通过实际编程了解非对称密码算法 RSA的加密和解密过程,加深对非对称密码算法的认识。二、实验环境运行 Windows或 Linux操作系统的 PC机,具有 JDK1.6版本的 Java语言编译环境。三、实验内容和步骤1.对 RSA算法的理解RSA算法(公开密钥算法)的原理:(1)选择两个大的素数 p和 q(典型情况下为 1024位)(2)计算 n = p * q和 z =(p-1)*(q-1).(3)选择一个与 z互素的数,将它称为 d(4)找到 e,使其满足 e*d = 1 mod z提前计算出这些参数以后,我们就可以开始执行加密了。首先将明文分成块
2、,使得每个明文消息 P落在间隔 0*Pn中。为了做到这一点,只要将明文划分成 k位的块即可,这里 k是满足 2kn的最大整数。为了加密一个消息 P,只要计算 C=Pe(mod n)即可。为了解密 C,只要计算 P=Cd(mod n)即可。可以证明,对于指定范围内的所有 P,加密盒解密互为反函数。为了执行加密,你需要 e和 n;为了执行解密,你需要 d和 n。因此,公钥是有( e,n)对组成,而私钥是有( d,n)对组成。实例:根据已知参数: p=3,q=11,M=2,计算公私钥,并对明文进行加密,然后对密文进行解密。由题意知: n = p * q33,z =(p-1)*(q-1)20,选 d7
3、,计算得 e=3,所以C=Me(mod n)8M=Cd(mod n)22、RSA算法与 DES算法的比较:运行附件的 RSATool,输入一大段文字,记录运行时间。再使用 DES算法加密相同的文字,记录运行时间,对比这两个时间发现,RSA算法比 DES算法慢DES慢很多。很多,因为 RSA算法进行的是大数运算,所以程序运行的速度比因此 RSA算法只适合于少量数据加密,不适合于大量数据加密。3、算法设计主要的方法:(1)、public static void GetPrime()方法名称:产生大数的方法。说明:利用 Java语言的中的 java.math.BigInteger类的方法中随机产生大
4、数。(2)、public static boolean MillerRobin(BigInteger num)1 方法名称:判断是否是素数的方法。参数说明:num是由 GetPrime方法产生的大数。说明:这个方法判断 GetPrime方法传过来的是否是一个素数,是就返回否就返回 false。true,(3)、public static BigInteger powmod( BigInteger a, BigInteger t, BigInteger num )方法名称:大数的幂运算方法。说明:这个方法对传入的大数进行幂运算。(4)、public static BigInteger invmo
5、d(BigInteger a, BigInteger b)方法名称:大数的取模运算方法。说明:这个方法对大数进行取模运算。(5)、public static String Encode(String inStr,BigInteger PrimeP,BigInteger PrimeQ,BigInteger n,int nLen,int m,JTextField d)方法名称:加密算法。参数说明:inStr是从界面输入的明文。PrimeP和 PrimeQ是由 GetPrime方法产生的两个大素数。n是由 PrimeP和 PrimeQ得到的值。nLen为 n的长度。d为公钥。(6)、public s
6、tatic String Decode(String inStr,BigInteger PrimeP,BigInteger PrimeQ,BigInteger n,int nLen,int m,JTextField e)方法名称:解密算法。参数说明:inStr是从界面输入的明文。PrimeP和 PrimeQ是由 GetPrime方法产生的两个大素数。n是由 PrimeP和 PrimeQ得到的值。nLen为 n的长度。e为私钥。4、源程序:( RSA1.java文件)import javax.swing.*;import java.awt.event.*;import java.math.*;i
7、mport java.util.*;import java.awt.*;import java.io.*;public class RSA1public static void main(String args)2 MyFrame frame = new MyFrame();MyPanel_fbuttonpanel_fbutton=newMyPanel_fbutton(frame,frame.P,frame.Q,frame.d,frame.e);FlowLayout fl = new FlowLayout (FlowLayout.CENTER,0,0);frame.setLayout(fl);
8、frame.add(panel_fbutton);frame.setBounds( 150, 100, 500, 480 );frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);class MyFrame extends JFramepublic MyFrame()setTitle(RSA算法 );add(wel);MyPanel_p panel_p = new MyPanel_p(P);add(panel_p);MyPanel_q panel_q = new MyPanel_q(Q);add(
9、panel_q);MyPanel_d panel_d = new MyPanel_d(d);add(panel_d);MyPanel_e panel_e = new MyPanel_e(e);add(panel_e);MyPanel_in panel_in = new MyPanel_in(input);add(panel_in);MyPanel_out panel_out = new MyPanel_out(output);add(panel_out);MyPanel_out1 panel_out1 = new MyPanel_out1(output1);add(panel_out1);My
10、Panel_button panel_button = new MyPanel_button(P,Q,d,e,input,output,output1);add(panel_button);private JLabel wel = new JLabel(RSA算法演示);protected JTextField P = new JTextField(35);protected JTextField Q = new JTextField(35);protected JTextField d = new JTextField(35);protected JTextField e = new JTe
11、xtField(35);protected JTextArea input = new JTextArea(4,35);3 protected JTextArea output = new JTextArea(4,35);protected JTextArea output1 = new JTextArea(4,35);class MyPanel_fbutton extends JPanelpublic MyPanel_fbutton(Frame aframe,JTextField aP, JTextField aQ, JTextField ad,JTextField ae)frame = a
12、frame;P = aP;Q = aQ;e = ae;d = ad;private Frame frame;private JTextField P;private JTextField Q;private JTextField d;private JTextField e;class MyPanel_p extends JPanelpublic MyPanel_p(JTextField aP)P=aP;add(new JLabel(add(P);质数 P:);private JTextField P;class MyPanel_q extends JPanelpublic MyPanel_q
13、(JTextField aQ)Q=aQ;add(new JLabel(质数 Q:);add(Q);private JTextField Q;class MyPanel_d extends JPanelpublic MyPanel_d(JTextField ad)4 d=ad;add(new JLabel(add(d);公钥:);private JTextField d;class MyPanel_e extends JPanelpublic MyPanel_e(JTextField ae)e=ae;add(new JLabel(私钥:);add(e);private JTextField e;
14、class MyPanel_in extends JPanelpublic MyPanel_in(JTextArea ainput)input = ainput;add(new JLabel(输入明文 :);JScrollPane jsp1 = new JScrollPane (input,v,h);add(jsp1);private JTextArea input;int v=JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED;int h=JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED;class MyPanel_out extends JPanelpublic MyPanel_out(JTextArea aoutput)output = aoutput;add(new
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年唐山科技职业技术学院单招职业适应性测试题库附答案详解(基础题)
- 2026年哈尔滨应用职业技术学院单招综合素质考试题库及答案详解(易错题)
- 2026年四川国际标榜职业学院单招职业适应性测试题库及一套答案详解
- 儿童互联网安全教育方案研究
- 10.1任务一 负债认知
- 过程安全管理实战心得
- 泌尿系统肿瘤 课件
- 医生在护理业务中的领导力
- 九江银行上饶分行2026年社会招聘考试备考题库及答案解析
- 2026年广州卫生职业技术学院单招职业适应性测试题库附答案解析
- 2026年及未来5年中国面粉加工行业市场发展现状及投资方向研究报告
- 女职工特殊保护 政策课件
- 2026年春季学期德育工作安排方案(德育四表)
- 2026年春人教PEP版(新教材)小学英语四年级下册(全册)教学设计(附目录)
- 2026年春统编版(新教材)小学道德与法治二年级下册(全册)教学设计(附目录P122)
- 2023年学位英语考试模拟试题二及答案
- 第一章 网络与生活课件 【知识精讲+备课精研+高效课堂】 教育科学出版社选择性必修二网络基础
- GA/T 823.2-2009油漆物证的检验方法第2部分:红外吸收光谱法
- 茶与健康课件第二讲茶成分
- 第6章 计数原理【精简思维导图梳理】高考数学高效备考 人教A版2019选择性必修第一册
- 马克思主义哲学原理讲义课件
评论
0/150
提交评论