作业要求:
(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();
}
}
结果截图:
以上是这篇内容。如果有什么疑惑或者发现问题的地方,欢迎留言之处。谢谢!