古典加密算法文档及代码.doc_第1页
古典加密算法文档及代码.doc_第2页
古典加密算法文档及代码.doc_第3页
古典加密算法文档及代码.doc_第4页
古典加密算法文档及代码.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机科学与技术学院 软件工程2班 20042170 宋鹏信息安全程序设计一一、实验目的:学习并掌握密码学基础中古典加密体制的一些主要方法。二、设计要求:编程实现移位密码、仿射密码、维吉尼亚密码和置换密码,要求如下:1、程序输入为明文和密钥(对于仿射密码应该检查密钥的合法性);2、执行加密和解密过程;3、输出加密的密文和解密恢复的明文,并和开始输入的明文进行比较。三、设计步骤:程序在JAVA环境中实现,由于编程基础不够扎实可能程序没有明显的体现出面向对象的风格,期望老师见谅。1:首先构造基本的古典加密界面如图1.1 图1.12:然后添加界面所用到的组件和注册监听器。3:编写各个算法的加密和解密函数进行加密解密时的调用。四、以下分别是构造界面,添加组件及监听器和各个算法实现代码,分别都有标注import java.awt.*;import javax.swing.*;import java.awt.event.*;/*构造古典加密算法界面*/public class JMJM extends WindowAdapter implements ActionListener,ItemListenerLabel l1=new Label(输入:),l2=new Label(加密:),l3=new Label(解密:),l4=new Label(密钥:); JFrame f;TextField t1=new TextField(55),t2=new TextField(55),t3=new TextField(55),t4=new TextField(20);Button b1=new Button(加密),b2=new Button(解密),b3=new Button(清屏);Choice c1;Panel p1,p2,p3,p4,p5,p6,p7,p8,p9;public void display() f=new JFrame(加密算法 宋鹏 20042170 QQ348946154 );f.setSize(480,200);f.setLocation(200,140);f.setBackground(Color.lightGray);f.setLayout(new BorderLayout();tiajiazujian();f.setVisible(true);/*添加界面组件以及监听器*/public void tiajiazujian() c1=new Choice();c1.add(移位算法);c1.add(仿射算法);c1.add(维吉尼亚算法);c1.add(置换算法);c1.addItemListener(this);f.add(c1,North);p1=new Panel();p3=new Panel();f.add(p3,Center);p3.setLayout(new FlowLayout();p3.add(l1);p3.add(t1);p3.add(l2);p3.add(t2);p3.add(l3);p3.add(t3);p2=new Panel();f.add(p2,South);p2.setLayout(new GridLayout(1,5);p2.add(l4);p2.add(t4);p2.add(b1);p2.add(b2);p2.add(b3);b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);/*对应不同加密算法的按钮点击事件*/public void actionPerformed(ActionEvent e) if (e.getSource()=b3&c1.getSelectedIndex()=0)t1.setText( );t2.setText( );t3.setText( );if (e.getSource()=b1&c1.getSelectedIndex()=0)ywjiami();if(e.getSource()=b2&c1.getSelectedIndex()=0)ywjiemi();if(e.getSource()=b1&c1.getSelectedIndex()=1)fcjiami();if(e.getSource()=b2&c1.getSelectedIndex()=1)fcjiemi();if(e.getSource()=b1&c1.getSelectedIndex()=2)wjnyjiami();if(e.getSource()=b2&c1.getSelectedIndex()=2)wjnyjiemi();if(e.getSource()=b1&c1.getSelectedIndex()=3)zhjiami();if(e.getSource()=b2&c1.getSelectedIndex()=3)zhjiemi();public void itemStateChanged(ItemEvent e)/*移位加密算法*/public void ywjiami() String s1;String s2;char zifu; s1=t1.getText();s2=t4.getText();int a;a=Integer.parseInt(s2);zifu = s1.toCharArray(); for (int i = 0;izifu.length ;i+ ) zifui=(char)(zifui-97+a)%26)+97); String s3=new String(zifu); s3=s3.toUpperCase();t2.setText(s3); /*移位解密算法*/public void ywjiemi() String s1;String s2;char zifu; s1=t2.getText();s2=t4.getText();int a;a=Integer.parseInt(s2);zifu = s1.toCharArray(); for (int i = 0;izifu.length ;i+ ) zifui=(char)(zifui-97-a)%26)+97); String s3=new String(zifu); s3=s3.toLowerCase();t3.setText(s3);/*求最大公约数辗转相除法*/int gcd(int a, int b) int k = 0;do k = a%b; a = b; b = k;while(k!=0);return a;/*求模逆*/int Ni(int a, int b) int i = 0;while(a*(+i)%b!=1);return i;/*仿射加密算法*/public void fcjiami() int i=0, a=0, b=0, tmp;String s1;String s2;char zifu; s1=t1.getText();s2=t4.getText(); a=Integer.parseInt(s2)/10;b=Integer.parseInt(s2)%10;zifu = s1.toCharArray();/*如果输入密钥不合法则显示密钥错误*/if(gcd(a,26)!=1) String s3=new String();s3=密钥错误; t3.setText(s3);for(i=0; i96&zifui64&zifui91)zifui = (char)(a*(zifui-65)+b)%26+65);String s4=new String(zifu);t2.setText(s4);/*仿射解密算法*/public void fcjiemi() int i=0, a=0, b=0, tmp;String s1;String s2;char zifu; s1=t1.getText();s2=t4.getText();/*在密钥输入文本框中输入2位密钥首先转换成2位整数在利用/和算法求出2个合法密钥在进行计算*/ a=Integer.parseInt(s2)/10;b=Integer.parseInt(s2)%10;zifu = s1.toCharArray();for(i=0; i64&zifui91) tmp = Ni(a,26)*(zifui-65)-b);if(tmp0) zifui = (char)(tmp%26+26+97);else zifui = (char)(tmp%26+97); String s4=new String(zifu); t3.setText(s4);/*维吉尼亚加密算法*/public void wjnyjiami() int i,j,s=0;int k=0 ;String s1;String s2;char zifu,miyao; s1=t1.getText();s2=t4.getText();miyao =s2.toCharArray();zifu = s1.toCharArray();for(i=0; izifu.length; i+)zifui = (char)(zifui-97+(miyaok%miyao.length-97)%26+97);k+;String s3=new String(zifu);s3=s3.toUpperCase();t2.setText(s3);/*维吉尼亚解密算法*/public void wjnyjiemi() int i,j,k=0,tmp;String s1;String s2;char zifu,miyao; s1=t2.getText();s2=t4.getText();s1=s1.toLowerCase();miyao =s2.toCharArray();zifu = s1.toCharArray();/*解密算法中会出现减出负数的状况如果出现负数加26解决问题*/ for (i =0;izifu.length ;i+ ) tmp = (zifui-miyaok%(miyao.length); zifui=(char)(tmp+65); if (tmp0) zifui =(char)(tmp+65+26); k+; ;String s3=new String(zifu);s3=s3.toLowerCase();t3.setText(s3);/*置换加密算法*/public void zhjiami() int i,k=0,tmp;String s1;String s2;char zifu,miyao;s1=t1.getText();s2=t4.getText(); zifu=s1.toCharArray(); miyao =s2.toCharArray();char zifu1=new charzifu.length;int j=new intmiyao.length;/*将输入的密钥的ASC码减去字符0对应的ASC码得数相应密钥对应的整形数值存取在整型数组j中*/for(i=0;imiyao.length;i+)ji=miyaoi-48;for(i=0; izifu.length; i+) tmp = i/miyao.length; zifu1i =zifuji%miyao.length+(tmp*miyao.length)-1; ;String s3=new String(zifu1);s3=s3.toUpperCase();t2.setText(s3); /*置换解密算法*/public void zhjiemi() int i,k=0,tmp;String s1;String s2;char zifu,miyao;s1=t2.getText();s2=t4.getText(); zifu=s1.toCharArray(); miyao =s2.toCharArray();char zifu1=new charzifu.length;int j=new intmiyao.length;/*将输入的密钥的ASC码减去字符0对应的ASC码得数相应密钥对应的整形数值存取在整型数组j中*/for(i=0;imiyao.length;i+)ji=miyaoi-48; for(i=0; izifu.length; i+)tmp = i/miyao.length; zifu1ji%miyao.length+tmp*miyao.length-1 =zifui;String s3=new String(zifu1);s3=s3.toLowerCase();t3.setText(s3); public static void main(String arg)JMJM ob=new JMJM();ob.display(); 五、运行结果截图以下是四种算法的加密解密截图,分别按照教案所提供的正确明文和密文对应数据运行结果截图。1:移位密码加密移位密码解密2:仿射密码加密仿射密码解密仿射密码密钥输入错误3:维吉尼亚密码加密维吉尼亚密码解密4:置换密码加密置换密码解密总结:通过这次的编程作业对古典加密的四种

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论