实验四      GUI界面的设计和运用

20135313吴子怡

一、实验目的

结合项目,为每个密码学算法设计能够提供使用者用户体验的操作界面,实现加解密、求得消息摘要的功能。

二、代码举例(备注:其中所使用的加解密方法均为未调库自己编写的,在此处不粘贴展示,但算法代码在所导入的Algorithm包内。)

1、AES加解密算法

(1)代码

package Main;

import Algorithm.*;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

public class AESMain extends JFrame implements ActionListener {
private JLabel sourceLabel, aimLabel, keyLabel;
private JTextField sourceText, aimText, keyText;
private JButton encryptBt, decryptBt, clearBt, exitBt, selectSourceBt,
selectAimBt;
private JRadioButton methodRadioButtons = new JRadioButton();

public static void main(String[] args) {
new AESMain("AES");
}

public AESMain(String title) {
super(title);

// 初始化组件
keyLabel = new JLabel("密钥", SwingConstants.RIGHT);
sourceLabel = new JLabel("源字符串", SwingConstants.RIGHT);
aimLabel = new JLabel("目标字符串", SwingConstants.RIGHT);

keyText = new JTextField(20);
sourceText = new JTextField(20);
aimText = new JTextField(20);

encryptBt = new JButton("加密");
decryptBt = new JButton("解密");
clearBt = new JButton("清空");
exitBt = new JButton("退出");

// 划分面板
Container c = this.getContentPane();
c.setLayout(new BorderLayout());
JPanel centerPanel = new JPanel();
JPanel northPanel = new JPanel();
JPanel southPanel = new JPanel();
JPanel eastPanel = new JPanel();
JPanel westPanel = new JPanel();
c.add(eastPanel, BorderLayout.EAST);
c.add(westPanel, BorderLayout.WEST);

northPanel.setLayout(new GridLayout(1, 3));
JPanel northLeftPanel = new JPanel();
JPanel northCenterPanel = new JPanel();
JPanel northRightPanel = new JPanel();
northCenterPanel.setLayout(new FlowLayout());
northPanel.add(northLeftPanel);
northPanel.add(northCenterPanel);
northPanel.add(northRightPanel);
c.add(northPanel, BorderLayout.NORTH);

southPanel.setLayout(new GridLayout(1, 2));
JPanel southLeftPanel = new JPanel(new FlowLayout());
JPanel southRightPanel = new JPanel(new FlowLayout());
southLeftPanel.add(encryptBt);
southLeftPanel.add(decryptBt);
southRightPanel.add(clearBt);
southRightPanel.add(exitBt);
southPanel.add(southLeftPanel);
southPanel.add(southRightPanel);
c.add(southPanel, BorderLayout.SOUTH);

centerPanel.setLayout(new BorderLayout());
JPanel centerEastPanel = new JPanel(new GridLayout(3, 1));
JPanel centerWestPanel = new JPanel(new GridLayout(3, 1));
JPanel centerCenterPanel = new JPanel(new GridLayout(3, 1));
JPanel centerSouthPanel = new JPanel();
JPanel centerNorthPanel = new JPanel();
JPanel panel1 = new JPanel(new FlowLayout());
JPanel panel2 = new JPanel(new FlowLayout());
JPanel panel3 = new JPanel(new FlowLayout());
JPanel panel4 = new JPanel(new FlowLayout());
JPanel panel5 = new JPanel(new FlowLayout());
JPanel panel6 = new JPanel(new FlowLayout());
JPanel panel7 = new JPanel(new FlowLayout());
JPanel panel8 = new JPanel(new FlowLayout());
JPanel panel9 = new JPanel(new FlowLayout());
panel1.add(sourceLabel);
panel2.add(sourceText);
panel4.add(aimLabel);
panel5.add(aimText);
panel7.add(keyLabel);
panel8.add(keyText);
centerWestPanel.add(panel1);
centerWestPanel.add(panel4);
centerWestPanel.add(panel7);
centerCenterPanel.add(panel2);
centerCenterPanel.add(panel5);
centerCenterPanel.add(panel8);
centerEastPanel.add(panel3);
centerEastPanel.add(panel6);
centerEastPanel.add(panel9);
centerPanel.add(centerEastPanel, BorderLayout.EAST);
centerPanel.add(centerWestPanel, BorderLayout.WEST);
centerPanel.add(centerCenterPanel, BorderLayout.CENTER);
centerPanel.add(centerSouthPanel, BorderLayout.SOUTH);
centerPanel.add(centerNorthPanel, BorderLayout.NORTH);
c.add(centerPanel, BorderLayout.CENTER);

// 加入按钮监听
encryptBt.addActionListener(this);
decryptBt.addActionListener(this);
clearBt.addActionListener(this);
exitBt.addActionListener(this);
methodRadioButtons.addActionListener(this);

// 设置关闭按钮
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
// invoke exit in outer class
System.exit(0);
}
});
pack();
// 设置界面大小
setSize(400, 300);
setLocation(0, 0);
setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(methodRadioButtons)) {
sourceLabel.setText("源字符串");
aimLabel.setText("目标字符串");
selectSourceBt.setEnabled(false);
selectAimBt.setEnabled(false);
clear();
}
if (e.getSource().equals(selectSourceBt)) {
String sourceFile = selectFile();
sourceText.setText(sourceFile);
}
if (e.getSource().equals(selectAimBt)) {
String aimFile = selectFile();
aimText.setText(aimFile);
}
if (e.getSource().equals(encryptBt)) {
encrypt();

}
if (e.getSource().equals(decryptBt)) {
decrypt();
}
if (e.getSource().equals(exitBt)) {
System.exit(0);
}
if (e.getSource().equals(clearBt)) {
clear();
keyText.setText("");
}

}

private String selectFile() {
String rootine = "";

File aFile = null; // 接收文件
int result = 0; // 接收操作状态
JFileChooser fileChooser = new JFileChooser(); // 文件选择框
fileChooser.setApproveButtonText("确定");
fileChooser.setDialogTitle("打开文件");
fileChooser.setMultiSelectionEnabled(false); // 不允许一次选择多个文件
fileChooser.setCurrentDirectory(new File("..\\AES")); // 设置默认文件夹路径
fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); // 只允许选择文件,不允许选择文件夹
// 设置文件过滤器
result = fileChooser.showOpenDialog(this);

if (result == JFileChooser.APPROVE_OPTION) // 选择的是确定按钮
{
aFile = fileChooser.getSelectedFile(); // 得到选择的文件
rootine = aFile.getPath();
} else if (result == JFileChooser.CANCEL_OPTION) {
}// 选择取消,文件选择框正常关闭
else {
JOptionPane.showMessageDialog(fileChooser, "文件选择框出现异常!");
}

return rootine;
}

public void encrypt() {
String source = sourceText.getText();
String key = keyText.getText();
try {

String result = new AES().textEncrypt(source, key);

aimText.setText(result);
JOptionPane.showMessageDialog(this, "加密完成! ");
return;
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "加密失败! ");
return;
}
}

public void decrypt() {
String source = sourceText.getText();
String key = keyText.getText();
try {

String result = new AES().textDecrypt(source, key);
aimText.setText(result);
JOptionPane.showMessageDialog(this, "解密完成! ");
return;
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "解密失败! ");
return;
}
}

private void clear() {
sourceText.setText("");
aimText.setText("");
}

}

(2)运行展示

2、MD5消息摘要算法

(1)代码

package Main;
import javax.swing.JOptionPane;
import Algorithm.MD5;

public class MD5Main {
public static void main(String[] args) {
String s1;
s1 = JOptionPane.showInputDialog("请输入明文,将使用MD5算法进行加密.");
String result = new MD5().calcMD5(s1);
JOptionPane.showMessageDialog(null, "消息摘要为:" + result);
}
}

(2)运行展示

三、心得体会

通过这次GUI的自学并应用,我掌握了部分的界面设计技巧和语句。并且能够应用上一些显示输入输出提示、选择等功能的方法,作出了一些简单的界面。因为是面向代码去自学,去寻找实现方式,因此所学到的东西毕竟少,也比较片面,希望在以后的学习中能够掌握更多的界面设计技巧,将界面做的更加丰富,比如带图片,或者包含更多选择功能、提示功能。

20135313_exp4的更多相关文章

随机推荐

  1. Linux vi编辑器使用技巧

    vi命令是UNIX操作系统和类UNIX操作系统中最通用的全屏幕纯文本编辑器.Linux中的vi编辑器叫vim,它是vi的增强版(vi Improved),与vi编辑器完全兼容,而且实现了很多增强功能. ...

  2. Redis之Redis主从复制

    概念: 主从复制就是主机数据更新后,根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主. 配置: (1)“一主二仆”策略 准备三台redis服务器 ...

  3. [译]C语言实现一个简易的Hash table(2)

    上一章,简单介绍了Hash Table,并提出了本教程中要实现的几个Hash Table的方法,有search(a, k).insert(a, k, v)和delete(a, k),本章将介绍Hash ...

  4. rcosfir函数的用法

    B = rcosfir(R, N_T, RATE, T, FILTER_TYPE) designs and returns a square root raised cosine filter if ...

  5. 《阿里巴巴Java开发手册》代码格式部分应用——idea中checkstyle的使用教程

    <阿里巴巴Java开发手册>代码格式部分应用--idea中checkstyle的使用教程 1.<阿里巴巴Java开发手册> 这是阿里巴巴工程师送给各位软件工程师的宝典,就像开车 ...

  6. 20155218 《Java程序设计》实验二(Java面向对象程序设计)实验报告

    20155218 <Java程序设计>实验二(Java面向对象程序设计)实验报告 一.实验内容及步骤 (一)单元测试 主要学习安装和使用junit来测试编写的程序,并学习以TDD(Test ...

  7. 2017-2018-2 《网络对抗技术》 20155322 第二周 Exp1 PC平台逆向破解(5)M

    #2017-2018-2 <网络对抗技术> 20155322 第二周 Exp1 PC平台逆向破解(5)M [博客目录] 1-实践目标 1.1-实践介绍 1.2-实践内容 1.3-实践要求 ...

  8. 2017-2018-1 20155327 《信息安全系统设计基础》课堂测试&课下作业

    2017-2018-1 20155327 <信息安全系统设计基础>课堂测试&课下作业 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep ...

  9. 20145226夏艺华 《Java程序设计》预备作业3

    安装虚拟机 上学期开学的时候就安装了Linux虚拟机,由于我的是Mac OS,所以和windows下的安装有所不同. 我使用的是VirtualBoxVM虚拟机,稳定性还不错,需要的同学可以从https ...

  10. Hadoop守护进程的作用(转)

    概述: <ignore_js_op> Hadoop是一个能够对大量数据进行分布式处理的软件框架,实现了Google的MapReduce编程模型和框架,能够把应用程序分割成许多的 小的工作单 ...