维吉尼亚算法大作业

作业要求:

(1)   使用java c#等编写图形化桌面程序完成维吉尼亚密码

(2)   基本界面的基本元素包括:

标题文本框(输入)文本区(结果)

下拉框/按钮(加密解密)

下拉框/文本框(输入m值)文本框(密钥K 

(3)   完成的功能:

1.输入完整性校验

一般要求:假设输入为英文字符,英文的标点,空格,数字等(可见的ASCII字符),提示用户输入非法,合格的输入仅能是a-z A-Z ‘ ‘ , . 和空格。如:“I love you my dialing.

提示:输入转换成char数组a[],判断a[i]ASCII值是不是a-z A-Z ‘ ‘ , . 和空格

2.可以实现加密和解密。

要求:只加密英文字母,标点和空格不加密。

明文Ii love wang. m=2 K=fg

fg fgfg  fgfg

        而不是 fg f gfgf gfgfgfg

代码部分(基本符合以上要求):

窗体部分:
package Vigeneres;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class VigenereFrame extends JFrame {

	private JTextField jtf1, jtf2, jtf3;
	//jtf1是写入明文  jtf2是写入密钥长度  jtf3是写入密钥
	private JTextArea jta;

	private JButton bt1, bt2;

    private JComboBox jcb1, jcb2;
	//构造函数
	@SuppressWarnings("unchecked")
	public VigenereFrame(){ 
		bt1 = new JButton("加密");
		bt1.setBounds(60, 230, 60, 40);//x表示横,y表示竖直, wdith宽,height高

		bt1.addActionListener(
				new ActionListener() {					
			@SuppressWarnings("static-access")
			@Override
			public void actionPerformed(ActionEvent e) {
				
				String text = "";
				String key = "";
				String len = "";
				text = jtf1.getText();
				len = jtf2.getText();
				key = jtf3.getText();
				//定义一个正则表达式
				String regExp = "[A-Za-z0-9]{0,}[.,'']{0,}[\\s+]{0,}";				
				Pattern pat = Pattern.compile(regExp);
				Matcher mat = pat.matcher(text);			
//				System.out.println(text);				
				if(mat.matches() || len.equals(jcb2.getSelectedItem())){
					JOptionPane.showMessageDialog(null,"明文和密钥都合法!","提示消息",JOptionPane.WARNING_MESSAGE);
				}
				else{
					JOptionPane.showMessageDialog(null,"明文或密钥输入不合法,请重新输入!","提示消息",JOptionPane.WARNING_MESSAGE);
				}							
				    Vigenere vr = new Vigenere();				
					jta.setText(vr.encrypt(text, key));				
			}
		});

		bt2 = new JButton("解密");
		bt2.setBounds(180, 230, 60, 40);

		bt2.addActionListener(
				new ActionListener() {					
			@SuppressWarnings("static-access")
			@Override
			public void actionPerformed(ActionEvent e) {
				
				String text = "";
				String key = "";
				String len = "";
				text = jtf1.getText();
				len = jtf2.getText();
				key = jtf3.getText();
				//定义一个正则表达式
				String regExp = "[A-Za-z0-9]{0,}[.,'']{0,}[\\s+]{0,}";			
				Pattern pat = Pattern.compile(regExp);
				Matcher mat = pat.matcher(text);			
//				System.out.println(text);				
				if(mat.matches() || len.equals(jcb2.getSelectedItem())){
					JOptionPane.showMessageDialog(null,"明文和密钥都合法!","提示消息",JOptionPane.WARNING_MESSAGE);
				}
				else{
					JOptionPane.showMessageDialog(null,"明文 或密钥输入不合法,请重新输入!","提示消息",JOptionPane.WARNING_MESSAGE);
				}							
				    Vigenere vr = new Vigenere();				
					jta.setText(vr.dencrypt(text, key));				
			}
		});
		
		jtf1 = new JTextField();		 
		jtf1.setBounds(60, 10, 200, 40);

		jtf2 = new JTextField();	//密钥长度	 
		jtf2.setBounds(60, 60, 200, 20);

		jtf3 = new JTextField();   //密钥 
		jtf3.setBounds(60, 120, 200, 20);

		jta = new JTextArea();
		jta.setBounds(60, 180, 200, 40);
		jta.setEnabled(false);//文本区设置为不可编辑

		jcb1 = new JComboBox();
		jcb1.addItem("加密");
		jcb1.addItem("解密");
		jcb1.setBounds(60, 150, 200, 20);
		
	     jcb1.addActionListener(new ActionListener(){
			@SuppressWarnings("static-access")
			@Override
			public void actionPerformed(ActionEvent e) {
				
				String text = "";
				String key = "";
				String len = "";
				text = jtf1.getText();
				len = jtf2.getText();
				key = jtf3.getText();
				//定义一个正则表达式
				String regExp = "[A-Za-z0-9]{0,}[.,'']{0,}[\\s+]{0,}";				
				Pattern pat = Pattern.compile(regExp);
				Matcher mat = pat.matcher(text);			
//				System.out.println(text);			
				if(mat.matches() || len.equals(jcb2.getSelectedItem())){
					JOptionPane.showMessageDialog(null,"明文和密钥都合法!","提示消息",JOptionPane.WARNING_MESSAGE);
				}
				else{
					JOptionPane.showMessageDialog(null,"明文 或密钥输入不合法,请重新输入!","提示消息",JOptionPane.WARNING_MESSAGE);
				}	
				if(jcb1.getSelectedItem().equals("加密")){
				    Vigenere vr = new Vigenere();				
					jta.setText(vr.encrypt(text, key));
					}
				else if(jcb1.getSelectedItem().equals("解密")){
					Vigenere vr = new Vigenere();				
					jta.setText(vr.dencrypt(text, key));
				}
			}
	     });
	     
		String number[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"};
		jcb2 = new JComboBox(number);
		jcb2.setBounds(60, 90, 200, 20);

		//将各组件置于该Frame中去
		this.add(jtf1);
		this.add(jtf2);
		this.add(jtf3);

		this.add(jta);

		this.add(bt1);
		this.add(bt2);

		this.add(jcb1);
		this.add(jcb2);

		//设置布局,布局格式设置为null 否则无法更改
		this.setLayout(null);

		//设置窗体
		this.setTitle("维吉尼亚密码");//设置标题栏

		this.setSize(300,320);//设置大小

		this.setDefaultCloseOperation(EXIT_ON_CLOSE);//默认关闭操作

		this.setResizable(true);//可最大化

		this.setVisible(true);//显示	 	 
	}
	
	public static void main(String[] args) {
			VigenereFrame frame = new VigenereFrame();
	}
}

加解密部分:
package Vigeneres;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class VigenereFrame extends JFrame {

	private JTextField jtf1, jtf2, jtf3;
	//jtf1是写入明文  jtf2是写入密钥长度  jtf3是写入密钥
	private JTextArea jta;

	private JButton bt1, bt2;

    private JComboBox jcb1, jcb2;
	//构造函数
	@SuppressWarnings("unchecked")
	public VigenereFrame(){ 
		bt1 = new JButton("加密");
		bt1.setBounds(60, 230, 60, 40);//x表示横,y表示竖直, wdith宽,height高

		bt1.addActionListener(
				new ActionListener() {					
			@SuppressWarnings("static-access")
			@Override
			public void actionPerformed(ActionEvent e) {
				
				String text = "";
				String key = "";
				String len = "";
				text = jtf1.getText();
				len = jtf2.getText();
				key = jtf3.getText();
				//定义一个正则表达式
				String regExp = "[A-Za-z0-9]{0,}[.,'']{0,}[\\s+]{0,}";				
				Pattern pat = Pattern.compile(regExp);
				Matcher mat = pat.matcher(text);			
//				System.out.println(text);				
				if(mat.matches() || len.equals(jcb2.getSelectedItem())){
					JOptionPane.showMessageDialog(null,"明文和密钥都合法!","提示消息",JOptionPane.WARNING_MESSAGE);
				}
				else{
					JOptionPane.showMessageDialog(null,"明文或密钥输入不合法,请重新输入!","提示消息",JOptionPane.WARNING_MESSAGE);
				}							
				    Vigenere vr = new Vigenere();				
					jta.setText(vr.encrypt(text, key));				
			}
		});

		bt2 = new JButton("解密");
		bt2.setBounds(180, 230, 60, 40);

		bt2.addActionListener(
				new ActionListener() {					
			@SuppressWarnings("static-access")
			@Override
			public void actionPerformed(ActionEvent e) {
				
				String text = "";
				String key = "";
				String len = "";
				text = jtf1.getText();
				len = jtf2.getText();
				key = jtf3.getText();
				//定义一个正则表达式
				String regExp = "[A-Za-z0-9]{0,}[.,'']{0,}[\\s+]{0,}";			
				Pattern pat = Pattern.compile(regExp);
				Matcher mat = pat.matcher(text);			
//				System.out.println(text);				
				if(mat.matches() || len.equals(jcb2.getSelectedItem())){
					JOptionPane.showMessageDialog(null,"明文和密钥都合法!","提示消息",JOptionPane.WARNING_MESSAGE);
				}
				else{
					JOptionPane.showMessageDialog(null,"明文 或密钥输入不合法,请重新输入!","提示消息",JOptionPane.WARNING_MESSAGE);
				}							
				    Vigenere vr = new Vigenere();				
					jta.setText(vr.dencrypt(text, key));				
			}
		});
		
		jtf1 = new JTextField();		 
		jtf1.setBounds(60, 10, 200, 40);

		jtf2 = new JTextField();	//密钥长度	 
		jtf2.setBounds(60, 60, 200, 20);

		jtf3 = new JTextField();   //密钥 
		jtf3.setBounds(60, 120, 200, 20);

		jta = new JTextArea();
		jta.setBounds(60, 180, 200, 40);
		jta.setEnabled(false);//文本区设置为不可编辑

		jcb1 = new JComboBox();
		jcb1.addItem("加密");
		jcb1.addItem("解密");
		jcb1.setBounds(60, 150, 200, 20);
		
	     jcb1.addActionListener(new ActionListener(){
			@SuppressWarnings("static-access")
			@Override
			public void actionPerformed(ActionEvent e) {
				
				String text = "";
				String key = "";
				String len = "";
				text = jtf1.getText();
				len = jtf2.getText();
				key = jtf3.getText();
				//定义一个正则表达式
				String regExp = "[A-Za-z0-9]{0,}[.,'']{0,}[\\s+]{0,}";				
				Pattern pat = Pattern.compile(regExp);
				Matcher mat = pat.matcher(text);			
//				System.out.println(text);			
				if(mat.matches() || len.equals(jcb2.getSelectedItem())){
					JOptionPane.showMessageDialog(null,"明文和密钥都合法!","提示消息",JOptionPane.WARNING_MESSAGE);
				}
				else{
					JOptionPane.showMessageDialog(null,"明文 或密钥输入不合法,请重新输入!","提示消息",JOptionPane.WARNING_MESSAGE);
				}	
				if(jcb1.getSelectedItem().equals("加密")){
				    Vigenere vr = new Vigenere();				
					jta.setText(vr.encrypt(text, key));
					}
				else if(jcb1.getSelectedItem().equals("解密")){
					Vigenere vr = new Vigenere();				
					jta.setText(vr.dencrypt(text, key));
				}
			}
	     });
	     
		String number[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"};
		jcb2 = new JComboBox(number);
		jcb2.setBounds(60, 90, 200, 20);

		//将各组件置于该Frame中去
		this.add(jtf1);
		this.add(jtf2);
		this.add(jtf3);

		this.add(jta);

		this.add(bt1);
		this.add(bt2);

		this.add(jcb1);
		this.add(jcb2);

		//设置布局,布局格式设置为null 否则无法更改
		this.setLayout(null);

		//设置窗体
		this.setTitle("维吉尼亚密码");//设置标题栏

		this.setSize(300,320);//设置大小

		this.setDefaultCloseOperation(EXIT_ON_CLOSE);//默认关闭操作

		this.setResizable(true);//可最大化

		this.setVisible(true);//显示	 	 
	}
	
	public static void main(String[] args) {
			VigenereFrame frame = new VigenereFrame();
	}
}

结果截图:

《维吉尼亚算法大作业》
以上是这篇内容。如果有什么疑惑或者发现问题的地方,欢迎留言之处。谢谢!

维吉尼亚相关的文章:点击打开链接     点击打开链接


    原文作者:维吉尼亚加密问题
    原文地址: https://blog.csdn.net/kobe_jr/article/details/79037676
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞