java课程设计图形界面加密助手完整版.docx
《java课程设计图形界面加密助手完整版.docx》由会员分享,可在线阅读,更多相关《java课程设计图形界面加密助手完整版.docx(47页珍藏版)》请在冰豆网上搜索。
java课程设计图形界面加密助手完整版
《Java程序设计》课程设计报告
2015—2016学年第一学期
设计题目加密/解密助手
学生姓名郭月盟/董小慧
学号311309030118/311309030118
专业班级信管1301
指导教师姜国权
2015年12月28日
1、设计任务书
1.1题目与要求
董小慧,郭月盟计划编写一个信息加密解密助手,主要用来对信息采用常用的MD5,SHA,DES等加密算法进行加密。
1、建立助手登录界面,主要是为了增加使用权限。
2、建立主界面,分7个模块,主要包括:
MD5加密,SHA加密,DES加密,助手使用帮助,助手说明,退出助手等功能模块。
3、MD5模块:
展示GUI可视界面,实现对信息的MD5加密,由于MD5加密算法不可逆,不可实现信息解密的功能。
最后,将生成的信息文件通过text文档保存至本工程的根目录下,产生MD5加密信息.txt。
4、SHA模块:
展示GUI可视界面,实现对信息的SHA加密,同时SHA加密算法与MD5的机制雷同,不存在逆向解密,不存在信息解密,信息解密功能不可用。
最后,将生成的信息文件通过text文档保存至本工程的根目录下,产生SHA加密信息.txt。
5、DES模块:
展示GUI可视界面,实现对信息的DES加密,存在密钥机制的自动生成。
DEC的加密机制存在可逆,实现信息的解密功能。
最后,将生成的信息文件通过text文档保存至本工程的根目录下,产生DES加密信息.txt。
6、使用帮助:
以图片轮转的方式,显示使用方式的截图。
7、助手说明:
简单介绍助手
根据分工,董小慧工作是主界面及美工设计,郭月盟负责算法设计与实现
1.2本系统涉及的知识点
结构、数组、循环、函数、MD5算法、SHA算法、DES算法、GUI、SWING
2、功能设计
2.1算法设计
本系统需要实现的功能要求:
(1)利用JComboBoxJPasswordFieldJLabelJButton实现以下登录功能
图1助手登录主界面
(2)登录后进入主界面,通过按钮组件,调用各样的加密类进入信息加密功能。
如图2所示的菜单,该菜单中每个选项调用一个加密类
图2功能菜单
(3)根据所选菜单编写相应功能类:
1、MD5不可逆加密算法
2、SHA不可逆加密算法
3、DES可逆+密钥加密算法
2.2模块流程图
图3助手模块图
3、程序代码设计
1)登录助手
packagekeshe;
/**
*@authorGuoyuemeng
*@param主界面
*
*/
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.border.*;
publicclassloginextendsJFrame
{
privateJComboBoxnameJComboBox;
privateJPaneluserJPanel;
privateJLabelpictureJLabel,JLabel1,mimalabel1,mimalabel2,mimalabel3;
privateJButtonokJButton,cancelJButton;
privateJLabelnameJLabel,passwordJLabel,note,label;
privateJPasswordFieldpasswordJPasswordField;
privateJButtonJButton,JButton1,JButton2,JButton3,JButton4,JButton5;
privateStringname1;
privateStringpassword1;
privateStringuser;
privateJTextAreaonetext1,onetext2,twotext1,twotext2,threetext1,threetext2;
privateImageIconmyImageIcon;
publiclogin(){
createUserInterface();//调用创建用户界面方法
}
privatevoidcreateUserInterface(){
ContainercontentPane=getContentPane();
contentPane.setLayout(null);
userJPanel=newJPanel();
userJPanel.setBounds(35,120,300,96);
userJPanel.setBorder(BorderFactory.createEtchedBorder());//显示一圈边儿
userJPanel.setLayout(null);
contentPane.add(userJPanel);
nameJComboBox=newJComboBox();
nameJComboBox.setBounds(100,12,170,25);
nameJComboBox.addItem("admin");
nameJComboBox.addItem("aloie");
nameJComboBox.setSelectedIndex(0);
nameJComboBox.setEditable(true);
userJPanel.add(nameJComboBox);
pictureJLabel=newJLabel();
pictureJLabel.setBorder(BorderFactory.createEtchedBorder());
pictureJLabel.setBounds(36,0,300,118);
pictureJLabel.setIcon(newImageIcon("pic.jpg"));//注意将图片文件放在项目的根目录
contentPane.add(pictureJLabel);
nameJLabel=newJLabel("姓名:
");
nameJLabel.setBounds(20,12,80,25);
userJPanel.add(nameJLabel);
passwordJPasswordField=newJPasswordField();
passwordJPasswordField.setBounds(100,60,170,25);
userJPanel.add(passwordJPasswordField);
passwordJLabel=newJLabel("密码:
");
passwordJLabel.setBounds(20,60,80,25);
userJPanel.add(passwordJLabel);
note=newJLabel("密码与用户名相同");
note.setBounds(0,295,180,25);
//note.set
add(note);
okJButton=newJButton("登陆");
okJButton.setBounds(60,250,80,25);
contentPane.add(okJButton);
okJButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
okJButtonActionPerformed(event);
}
});
cancelJButton=newJButton("取消");
cancelJButton.setBounds(210,250,80,25);
contentPane.add(cancelJButton);
cancelJButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
System.exit(0);//退出登陆
}
});
setTitle("信息解密、解密助手");
setSize(380,350);
setLocation(400,200);//设置登录框的位置
setResizable(false);//将最大化按钮设置为不可用
}
privatevoidokJButtonActionPerformed(ActionEventevent){
//okJButton响应事件,检查用户名和密码的匹配
name1=nameJComboBox.getSelectedItem().toString();
if(name1.equals("admin")){
if(passwordJPasswordField.getText().equals("admin")){
showNewWindow();
setVisible(false);
}else{
JOptionPane.showMessageDialog(this,"密码错误,助手无法提供服务","警告:
密码错误!
",JOptionPane.ERROR_MESSAGE);
}
}
elseif(name1.equals("aloie")){
if(passwordJPasswordField.getText().equals("aloie")){
showNewWindow();
setVisible(false);
}
else{
JOptionPane.showMessageDialog(this,"密码错误,助手无法提供服务","警告:
密码错误!
",JOptionPane.ERROR_MESSAGE);
}
}
}
publicvoidshowNewWindow(){//此处生成新的窗口
JFramejf=newJFrame("信息加密/解密");
jf.setSize(900,600);
jf.setLocation(200,100);//设置主框的位置
jf.setVisible(true);
jf.setResizable(false);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//特别注意,标签,按键要集中于一块,不要穿插
JButton=newJButton("MD5加密");
JButton.setBounds(40,90,130,25);
jf.add(JButton);
JButton.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
//JButtonActionPerformed(event);
jiamiOne();
}
});
JButton1=newJButton("SHA加密");
JButton1.setBounds(40,190,130,25);
jf.add(JButton1);
JButton1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
//JButtonActionPerformed(event);
jiamiTwo();
}
});
JButton2=newJButton("DES加密");
JButton2.setBounds(40,290,130,25);
jf.add(JButton2);
JButton2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
jiamiThree();
}
});
JButton3=newJButton("退出助手");
JButton3.setBounds(40,390,130,25);
jf.add(JButton3);
JButton3.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
System.exit(0);
}
});
JButton4=newJButton("使用帮助");
JButton4.setBounds(350,400,130,25);
jf.add(JButton4);
JButton4.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
newHelp();
}
});
JButton5=newJButton("助手说明");
JButton5.setBounds(600,400,130,25);
jf.add(JButton5);
JButton5.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevent){
//JButtonActionPerformed(event);
jf.setEnabled(false);
showNote();
jf.setEnabled(true);
}
});
JLabel1=newJLabel();//设置中间的隔线
JLabel1.setBorder(BorderFactory.createEtchedBorder());
JLabel1.setBounds(200,0,2,600);
jf.add(JLabel1);
nameJLabel=newJLabel();
nameJLabel.setBounds(300,100,500,250);
nameJLabel.setBorder(BorderFactory.createEtchedBorder());
nameJLabel.setIcon(newImageIcon("zhu.jpg"));
jf.add(nameJLabel);
nameJLabel=newJLabel();//不知道为什么,必须重复一下才行
nameJLabel.setBounds(300,100,500,250);
nameJLabel.setBorder(BorderFactory.createEtchedBorder());
jf.add(nameJLabel);
}
publicvoidshowNote(){
JFramenote=newJFrame("助手说明");
note.setSize(500,200);
note.setLocation(500,180);//设置主框的位置
note.setVisible(true);
note.setResizable(false);
JLabellabel=newJLabel(""
+" 这个小助手是课程设计的一个小练习,通过小练习,加深对java的理解,和对"
+"java图形awt,swing,等各种类的使用。
但是由于只是一个小小的课程设计,该助手只"
+"能实现简单加密(自定秘钥),和信息的解密(提供秘钥而且是助手认可的加密方"
+"式),对java的学习还比较前,有各种的不足还要学习,以以上小助手献丑啦
"
+"----------------------------------------------------------------"
+"-----------------2015.12.28--编者:
郭月盟"
+"");
//JLabellabel=newJLabel("第一行
第二行");
label.setBounds(300,100,500,450);
label.setBorder(BorderFactory.createEtchedBorder());
note.add(label);
}
publicvoidshowHelp(){
JFramehelp=newJFrame("使用帮助");
help.setSize(500,400);
help.setLocation(500,100);//设置主框的位置
help.setVisible(true);
help.setResizable(false);
//JScrollPanejscrollpane=newJScrollPane(help);
nameJLabel=newJLabel("第一个");
nameJLabel.setBounds(300,100,500,250);
nameJLabel.setBorder(BorderFactory.createEtchedBorder());
help.add(nameJLabel);
nameJLabel=newJLabel();//不知道为什么,必须重复一下才行
nameJLabel.setBounds(300,100,500,250);
nameJLabel.setBorder(BorderFactory.createEtchedBorder());
help.add(nameJLabel);
}
publicvoidjiamiOne(){
newMD5();
}
publicvoidjiamiTwo(){
newSHA();
}
publicvoidjiamiThree(){
newgener();
}
publicstaticvoidmain(String[]args){
JFrame.setDefaultLookAndFeelDecorated(true);
loginmylogin=newlogin();
mylogin.setVisible(true);
mylogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
2)MD5类
packagekeshe;
/**
*@authorGuoyuemeng
*@paramMD5加密算法
*@paramAlgorithm
*/
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.io.UnsupportedEncodingException;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importjava.io.File;
importjava.io.FileWriter;
importjava.io.BufferedWriter;
importjava.io.IOException;
//实现接口ActionListener
publicclassMD5implementsActionListener{
JFramejf;
JPaneljpanel;
JButtonjb1,jb2,jb3;
JTextAreajta=null;
JScrollPanejscrollPane;
publicMD5(){
jf=newJFrame("MD5");
ContainercontentPane=jf.getContentPane();
contentPane.setLayout(newBorderLayout());
jta=newJTextArea(10,15);
jta.setTabSize(4);
jta.setFont(newFont("标楷体",Font.BOLD,16));
jta.setLineWrap(true);//激活自动换行功能
jta.setWrapStyleWord(true);//激活断行不断字功能
jta.setBackground(Color.white);
jscrollPane=newJScrollPane(jta);
jpanel=newJPanel();
jpanel.setLayout(newGridLayout(1,3));
jb1=newJButton("MD5加密");
jb1.addActionListener(this);
jb2=newJButton("MD5解密");
jb2.addActionListener(this);
jb3=newJButton("保存");
jb3.addActionListener(this);
jpanel.add(jb1);
jpanel.add(jb2);
jpanel.add(jb3);
contentPane.add(jscrollPane,BorderLayout.CENTER);
contentPane.add(jpanel,BorderLayout.SOUTH);
jf.setSize(600,400);
jf.setLocation(400,200);
jf.setVisible(true);
}
//覆盖接口ActionListener的方法actionPerformed
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==jb1){
//jta.copy();
String[]