




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JAVA实现凯撒密码 陈君山一 凯撒密码流程图、开始请输入您要加密的明文String a; char b;int i=0; int d;char e;ia.length().b=a.toCharArray();d=(int)bi-96)+3)%26; e=(char)(s+96);a=cin.nextLine(); i=i+1;输出e结束二 源代码import java.util.*;public class Main public static void main(String args) Scanner cin =new Scanner(System.in); String a; char b; int s; char d; System.out.println(请输入明文:); a=cin.nextLine(); for(int i=0;ia.length();i+) b=a.toCharArray(); s=(int)bi-96)+3)%26; d=(char)(s+96); System.out.print(d); Java实现RC4算法import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;/程序窗口主类;=public class RC4Frame extends JFrame /窗口的主容器板; JPanel cp = (JPanel) getContentPane(); /按钮和单选器件所在的容器板; JPanel opPanel=new JPanel(); /除Label以外的控件所在的容器板; JPanel infoPanel=new JPanel(); /Label所在的容器板; JPanel tPanel0=new JPanel(); /对应四个文本域的滚动容器板; JScrollPane jsp0=new JScrollPane(); JScrollPane jsp1=new JScrollPane(); JScrollPane jsp2=new JScrollPane(); JScrollPane jsp3=new JScrollPane(); /四个文本域, /分别为:明文输入框,密钥输入框,子密钥流显示框,密文显示框; JTextArea jta0=new JTextArea(20,11); JTextArea jta1=new JTextArea(20,11); JTextArea jta2=new JTextArea(20,11); JTextArea jta3=new JTextArea(20,11); /加密/解密模式选择的单选组件; JRadioButton jb1=new JRadioButton(明文加密); JRadioButton jb2=new JRadioButton(密文解密); /功能按钮; JButton b1=new JButton(加 / 解密); JButton b2=new JButton(打开明文); JButton b3=new JButton(打开密文); JButton b4=new JButton(保存密文); JButton b5=new JButton(退出); JButton b6=new JButton(清空); ButtonGroup bg=new ButtonGroup(); /RC4加解密类的对象; RC4Crypt rc4; /保存密文结果的byte数组; byte result; /保存/打开对话框; JFileChooser jfc = new JFileChooser(); /RC4的构造方法,包括初始化版面与类变量;* public RC4Frame() setSize(640,450); setVisible(true); setResizable(false); setTitle(RC4流密码加解密程序V1.0:); setDefaultCloseOperation(EXIT_ON_CLOSE); /将文本域填入滚动容器板; jsp0.getViewport().add(jta0); jsp1.getViewport().add(jta1); jsp2.getViewport().add(jta2); jsp3.getViewport().add(jta3); /将子密钥框和秘文框设置为不可编辑; jta2.setEditable(false); jta3.setEditable(false); /为文本域添加自动换行功能; jta0.setLineWrap(true); jta1.setLineWrap(true); jta2.setLineWrap(true); jta3.setLineWrap(true); /初始化Lablel的版面; tPanel0.setLayout(new GridLayout(1,5); tPanel0.add(new JLabel(明文输入框: ); tPanel0.add(new JLabel(密码输入框: ); tPanel0.add(new JLabel(子密码流显示: ); tPanel0.add(new JLabel(密文码显示: ); tPanel0.add(new JLabel( ); tPanel0.setSize(600,20); /初始化程序的功能组件版面; infoPanel.setLayout(new GridLayout(1,5); infoPanel.add(jsp0); infoPanel.add(jsp1); infoPanel.add(jsp2); infoPanel.add(jsp3); infoPanel.add(opPanel); /初始化程序母板面; cp.setLayout(new FlowLayout(); cp.add(tPanel0); cp.add(infoPanel); /初始化程序控制组件版面; opPanel.setLayout(new GridLayout(8,1); opPanel.add(jb1);opPanel.add(jb2); opPanel.add(b1);opPanel.add(b2);opPanel.add(b3); opPanel.add(b4);opPanel.add(b5);opPanel.add(b6); bg.add(jb1);bg.add(jb2); jb1.setSelected(true); /为控制按钮添加监听器; b1.addActionListener(new B1_actionAdapter(this); b2.addActionListener(new B2_actionAdapter(this); b3.addActionListener(new B3_actionAdapter(this); b4.addActionListener(new B4_actionAdapter(this); b5.addActionListener(new B5_actionAdapter(this); b6.addActionListener(new B6_actionAdapter(this); /初始化RC4对象; rc4=new RC4Crypt(); /加/解密按钮的监听器方法;* protected void b1_actionPerformed (ActionEvent e) /判断是否可进行操作的标志变量; boolean flag=true; /输入密钥后才能进行加/解密; if(!jta1.getText().equals() /第一个单选钮被选中后进行加密; if(jb1.isSelected()=true) /调用RC4Crypy的第二个构造方法,进行加密系列操作; /参数为明文字符串和密钥; rc4=new RC4Crypt(jta0.getText(),jta1.getText(); jta2.setText(); /将加密过程中产生的子密钥流列出; for(int i=0;irc4.length;i+) jta2.append(字节+(i+1)+: +rc4.subKeyi+n); /更新现阶段秘文; result=rc4.result; jta3.setText(); /将密文的字节内容列出; for(int i=0;irc4.length;i+) jta3.append(字节+(i+1)+: +rc4.resulti+n); /第二个单选钮被选中后进行解密; else try /调用RC4Crypy的第三个构造方法,进行解密系列操作; rc4=new RC4Crypt(result,jta1.getText(); jta0.setText(); /将加密过程中产生的子密钥流列出; for(int i=0;irc4.length;i+) jta2.append(字节+(i+1)+: +rc4.subKeyi+n); /将解密得到的明文列出; jta0.setText(rc4.recoverToString(); catch(Exception ex) System.out.println(ex.getMessage(); else /无密钥提示; jta3.setText(请输入密钥!); /打开明文文本按钮的监听器方法;* protected void b2_actionPerformed (ActionEvent e) /将打开的明文文本内容列出; jta0.setText(openTextFile(); /打开保存过的密文数据文件按钮监听器方法;* protected void b3_actionPerformed (ActionEvent e) /打开秘文文件的方法; openResultFile(); /保存密文结果文件按钮监听器方法;* protected void b4_actionPerformed (ActionEvent e) /保存密文结果文件的方法; saveResultFile(); /退出按钮监听器方法;* protected void b5_actionPerformed (ActionEvent e) System.exit(0); /清空按钮监听器方法;* protected void b6_actionPerformed (ActionEvent e) jta0.setText();jta1.setText(); jta2.setText();jta3.setText(); result=null;rc4=null; /从.txt文件中读取文本内容的方法;* private String openTextFile() String message = ; /显示文件打开对话框; if (JFileChooser.APPROVE_OPTION = jfc.showOpenDialog(this) try /确定要读取文件的文件名; String filename1 = jfc.getSelectedFile().getPath(); /建立以此文件名为目标的文件对象; File file = new File(filename1); /确定文件大小,单位字节; int size = (int) file.length(); /建立存储从文件读出内容的字符数组; char data = new charsize; /建立文件读取对象; FileReader in = new FileReader(file); int readChar = 0; /按字符逐个从文件读取字符,存入data; while (in.ready() readChar = readChar + in.read(data, readChar, size - readChar); /关闭文件读取对象; in.close(); /将字符数组改为字符串; message = new String(data, 0, readChar); catch (Exception e) message = e.getMessage(); return message; /从密文结果文件中读取数据内容的方法;* private String openResultFile() String message = ; /显示文件打开对话框; if (JFileChooser.APPROVE_OPTION = jfc.showOpenDialog(this) try /确定要读取文件的文件名; String filename1 = jfc.getSelectedFile().getPath(); /建立以此文件名为目标的文件对象; File file = new File(filename1); /确定文件大小,单位字节; int size = (int) file.length(); /显示本文件的字节数; jta3.setText(共有+size+字节n); byte temp=(byte)0; /重新建立一个容量等于文件大小的byte数组,并以此来更新result; result = new bytesize; /建立标准数据类型的文件读取流对象; DataInputStream in=new DataInputStream(new FileInputStream(file); /逐个字节读取文件中的数据并存在result; for (int i=0;isize;i+) temp= in.readByte(); jta3.append(字节+(i+1)+: +temp+n); resulti=temp; /关闭读取流; in.close(); catch (Exception e) message = e.getMessage(); return message; /将密文结果存入结果文件的方法;* private String saveResultFile() String message = ; /保存条件:result已被初始化; if (result instanceof byte)& /显示文件保存对话框; (JFileChooser.APPROVE_OPTION = jfc.showSaveDialog(this) try /确定要读取文件的文件名; String filename1 = jfc.getSelectedFile().getPath(); /建立以此文件名为目标的文件对象; File file = new File(filename1); /建立标准数据类型的文件输出流对象; DataOutputStream out=new DataOutputStream(new FileOutputStream(file); /逐个字节将resunlt内容写入文件; for (int i=0;iresult.length;i+) out.writeByte(resulti); /关闭文件输出流对象; out.close(); catch (Exception e) message = e.getMessage(); return message; /程序测试方法;* public static void main(String args) RC4Frame mainframe=new RC4Frame(); System.out.println(Hello World!); /RC4加/解密数据处理类;=class RC4Crypt /S盒的byte数组; private byte box; /明文的字符串; public String plaintext; /明文byte数组; public byte bytePlaintext; /密文结果的byte数组; public byte result; /输入密钥的字符串; public String mainKey; /子密钥的byte数组; public byte subKey; /本加/解密明/密的字节长度; public int length; /无参数构造方法;* public RC4Crypt() /顺序初始化S盒; makeBox(); /用于实现明文加密的构造方法;* public RC4Crypt(String a,String b) /明文,密钥字符串参数传递; plaintext=a; mainKey=b; /顺序初始化S盒; makeBox(); /用明文字符串初始化明文byte数组; getBytePlaintext(); try /初始化本对象内容长度; length=bytePlaintext.length; /初始化子密钥byte数组; getSubKey(); /进行加密计算; encrypt(); catch(Exception ex) System.out.println(ex.getMessage(); /实现密文解密的构造方法;* public RC4Crypt(byte a,String b) /密文byte数组,密钥字符串参数传递; result=a; mainKey=b; /顺序初始化S盒; makeBox(); try /初始化本对象内容长度; length=result.length; /初始化子密钥byte数组; getSubKey(); /进行解密运算; decrypt(); catch(Exception ex) System.out.println(ex.getMessage(); /初始化S盒内数据的方法;* private void makeBox() box=new byte256; /用B到B的内容依次初始化S盒; /注意byte类型数据表示0-255无符号数字的顺序; /B(0)-B(127)-B(-128)-B(-1) for(int i=0;i256;i+) if(i127) boxi=(byte)i; else boxi=(byte)(i-256); /把明文改变为相应的byte数组的方法;* private void getBytePlaintext() bytePlaintext=plaintext.getBytes(); /把byte数组恢复成字符串的方法;* public String recoverToString() return new String(bytePlaintext); /获得自密钥的方法;* private void getSubKey()throws Exception /声明所需要的局部变量 int j=0,hold=0; byte temp=0; byte key =mainKey.getBytes(); /通过j值的变化和密钥内容,逐步混淆S盒; for (int i=0; i0?boxi:(boxi+256) +(keyi%key.length0?keyi%key.length:(keyi%key.length+256)%256; /空杯法换位; temp=boxi;boxi=boxj;boxj=temp; int i=j=0; /声明一个容量等于本对象内容长度的byte数组来跟新子密钥数组; subKey=new bytelength; for(int k=0;k0?boxi:(boxi+256)%256; /空杯发换位; temp=boxi;boxi=boxj;boxj=temp; /子密钥byte数组各元素混淆赋值; subKeyk=box(boxi0?boxi:(boxi+256)+(boxj0?boxj:(boxj+256)%256; /加密计算方法;* private void encrypt()throws Exception result=new bytelength; /明文byte数组与子密钥byte数组异或,得到密文byte数组; for(int i=0;ilength;i+) resulti=(byte)(bytePlaintextisubKeyi); /解密计算方法;* private void decrypt()throws Exception bytePlaintext=new bytelength; /密文byte数组于子密钥byte数组异或,得到明文byte数组; for(int i=0;ilength;i+) bytePlaintexti=(byte)(resultisubKeyi); /各按钮的监听器的实例模板类;=class B1_actionAdapter implements ActionListener private RC4Frame adaptee; B1_actionAdapter(RC4Frame adaptee) this.adaptee = adaptee; public void actionPerformed(ActionEvent e) adaptee.b1_actionPerformed(e); class B2_actionAdapter implements ActionListener pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年员工安全知识测试题库及答案
- 花圃拆除施工方案模板(3篇)
- 2025年检验师面试题库及解析版
- 2025年土地整治项目管理员中级考试备考资料及高频题库
- 2025年电网计算机笔试高频题解析
- 2025年经典旅游案例教学及竞赛模拟题库
- 2025年建筑水电安装工程师执业资格考试试题及答案解析
- 2025年机关幼儿园招聘面试预测题
- 2025年会展策划专家资格考试试题及答案解析
- 2025年化工工程师职业能力评估试题及答案解析
- 设备搬迁调试协议合同书
- 中证信息技术笔试题库
- 监护学徒协议书范本
- 办公楼维修改造施工方案
- 集团海外业务管理手册(专业完整格式模板)
- 高危儿培训计划和方案
- 2025年公文写作基础知识竞赛试题库及答案(共120题)
- ISO9001 质量管理体系全套(质量手册+程序文件+表格记录全套)
- 路灯CJJ检验批范表
- 肛肠科年度汇报总结
- 鸡蛋合作合同范本
评论
0/150
提交评论