Java可视化之实现文本的加密和解密
一、题目
编写一个java程序,实现一个文本信息的加密。
二、要求
可视化界面,友好的输入和输出,文件的存取。
三、分析
所谓数据加密(data encryption)技术是指将一个信息(或称明文,plain text)经过加密钥匙(encryption key)及加密函数转换,变成无意义的密文(cipher text),而接收方则将此密文经过解密函数、解密钥匙(decryption key)还原成明文。
四、界面规划
登录验证界面
建立基本框架,基于swing中frame
各组件的属性
组件编号/类型 | 名称/属性 |
1 /jlabel | lblnewlabel/用户名 |
2/jpasswordfield | passwordfield/ |
3 /jbutton | btnnewbutton/确定 |
4 /jtextfield | textfield/ |
5 /jpasswordfield | passwordfield/ |
6 /jbutton | btnnewbutton_1/退出 |
(左边一列从上到下依次为1-2,右边一列从上到下依次为3-5)
五、功能实现
5.1 确定功能实现
当use_name和password都正确时,跳转到下一界面,否则按下正确按钮时,将输入的字符串重置为空。
string use_name=textfield.gettext(); string password; password=string.valueof(passwordfield.getpassword()); if(use_name.equals("djc期待")&&password.equals("1234")) { signup.this.setvisible(false); jia_mi d=new jia_mi();//加密和解密类 d.setvisible(true); } else { string nl=""; textfield.settext(nl); passwordfield.settext(nl); }
5.2 退出功能实现
正常退出,程序正常执行结束退出
system.exit(0);
建立基本框架,基于swing中frame
各组件的属性
组件编号/类型 | 名称/属性 |
1 /jbutton | btnnewbutton_2/<<翻译 |
2/jtextarea | textarea/ |
3 /jbutton | btnnewbutton_1/打开密文 |
4/jtextarea | textarea_1/ |
5 /jbutton | btnnewbutton/保存文本 |
(左边一列从上到下依次为1-2,右边一列从上到下依次为3-5)
多行文本输入框的功能与单行文本输入框的功能相同,只是它能显示更多的文字。因为单行文本输入框只能输入一行的文字,所以需要输入和显示较多的文字时,就要用到多行文本输入框。多行文本输入框是由 jtextarea 类实现的。
5.3 加密文本的产生
在caretupdate()函数中,先取到用户输入的字符然后依次将这些字符转为unicode编码加999重新以字符的编码赋值输出,显示在右边jtextarea中。
string str1=textarea.gettext(); string str2=""; char c; for(int i=0;i<str1.length();i++) { c=str1.charat(i); c=(char)(c+999); str2+=c; } textarea_1.settext(str2);
5.4 密码文件的保存
jfilechooser jfchooser=new jfilechooser(); if(jfchooser.showsavedialog(null)== jfilechooser.approve_option) { file f=jfchooser.getselectedfile(); try { filewriter fw=new filewriter(f); string str=textarea_1.gettext(); fw.write(str); fw.close(); } catch(ioexception e1) { e1.printstacktrace(); } }
5.5 密码文件的解密
public void actionperformed(actionevent e) { jfilechooser fchooser=new jfilechooser(); if(fchooser.showopendialog(null)== jfilechooser.approve_option) { file f=fchooser.getselectedfile(); try { filereader fr=new filereader(f); try { int n=fr.read(); string str=""; char c; while(n!=-1) { c=(char)n; str+=c; n=fr.read(); } textarea_1.settext(str); fr.close(); } catch(ioexception e1) { e1.printstacktrace(); } } catch(filenotfoundexception e1) { e1.printstacktrace(); } }
5.6 <<翻译
加密过程的反过程。
string str2=textarea_1.gettext(); string str1=""; for(int i=0;i<str2.length();i++) { char c=str2.charat(i); c=(char)(c-999); str1+=c; } textarea.settext(str1); }
六、功能测试
登录
账号和密码不同时为对时,账号框和密码框重置。
密码和账号同时为对时,进入加密和解密界面。
文本与加密文本的转换。
保存的文件。
打开密文方法与以上相同。
将密文(unicode编码)转换明文。
将程序导出为一个可执行的java软件
桌面可执行软件。
步骤:file-export-选择main函数所在类-选择导出的位置。
七、程序源码
7.1 signup.java
package 文本信息的加密与解密; import java.awt.borderlayout; import java.awt.eventqueue; import java.awt.frame; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.border.emptyborder; import javax.swing.jlabel; import javax.swing.jtextfield; import javax.swing.jbutton; import java.awt.event.actionlistener; import java.awt.event.actionevent; import javax.swing.jpasswordfield; public class signup extends jframe { private jpanel contentpane; private jtextfield textfield; private jpasswordfield passwordfield; /** * launch the application. */ public static void main(string[] args) { eventqueue.invokelater(new runnable() { public void run() { try { signup frame = new signup(); frame.setvisible(true); } catch (exception e) { e.printstacktrace(); } } }); } /** * create the frame. */ public signup() { setdefaultcloseoperation(jframe.exit_on_close); setbounds(100, 100, 450, 300); contentpane = new jpanel(); contentpane.setborder(new emptyborder(5, 5, 5, 5)); setcontentpane(contentpane); contentpane.setlayout(null); jlabel lblnewlabel = new jlabel("\u7528\u6237\u540d"); lblnewlabel.setbounds(34, 27, 69, 26); contentpane.add(lblnewlabel); jlabel lblnewlabel_1 = new jlabel("\u5bc6\u7801"); lblnewlabel_1.setbounds(34, 104, 69, 26); contentpane.add(lblnewlabel_1); textfield = new jtextfield(); textfield.setbounds(153, 30, 164, 35); contentpane.add(textfield); textfield.setcolumns(10); jbutton btnnewbutton = new jbutton("\u786e\u5b9a"); btnnewbutton.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { string use_name=textfield.gettext(); string password; password=string.valueof(passwordfield.getpassword()); if(use_name.equals("djc期待")&&password.equals("1234")) { signup.this.setvisible(false); jia_mi d=new jia_mi(); d.setvisible(true); } else { string nl=""; textfield.settext(nl); passwordfield.settext(nl); } } }); btnnewbutton.setbounds(53, 194, 93, 23); contentpane.add(btnnewbutton); jbutton btnnewbutton_1 = new jbutton("\u9000\u51fa"); btnnewbutton_1.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { system.exit(0); } }); btnnewbutton_1.setbounds(234, 194, 93, 23); contentpane.add(btnnewbutton_1); passwordfield = new jpasswordfield(); passwordfield.setbounds(153, 104, 164, 24); contentpane.add(passwordfield); } }
7.2 jia_mi.java
package 文本信息的加密与解密; import java.awt.eventqueue; import java.awt.frame; import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.border.emptyborder; import java.awt.event.actionlistener; import java.io.file; import java.io.filenotfoundexception; import java.io.filereader; import java.io.filewriter; import java.io.ioexception; import java.awt.event.actionevent; import javax.swing.jtextarea; import javax.swing.jbutton; import javax.swing.jfilechooser; import javax.swing.event.caretlistener; import javax.swing.event.caretevent; public class jia_mi extends jframe { private jpanel contentpane; /** * launch the application. */ public static void main(string[] args) { eventqueue.invokelater(new runnable() { public void run() { try { jia_mi frame = new jia_mi(); frame.setvisible(true); } catch (exception e) { e.printstacktrace(); } } }); } /** * create the frame. */ public jia_mi() { setdefaultcloseoperation(jframe.exit_on_close); setbounds(100, 100, 630, 404); contentpane = new jpanel(); contentpane.setborder(new emptyborder(5, 5, 5, 5)); setcontentpane(contentpane); contentpane.setlayout(null); jtextarea textarea_1 = new jtextarea(); textarea_1.setwrapstyleword(true); textarea_1.setlinewrap(true); textarea_1.setbounds(356, 97, 187, 164); contentpane.add(textarea_1); jtextarea textarea = new jtextarea(); textarea.setwrapstyleword(true); textarea.setlinewrap(true); textarea.addcaretlistener(new caretlistener() { public void caretupdate(caretevent arg0) { string str1=textarea.gettext(); string str2=""; char c; for(int i=0;i<str1.length();i++) { c=str1.charat(i); c=(char)(c+999); str2+=c; } textarea_1.settext(str2); } }); textarea.setbounds(35, 97, 187, 164); contentpane.add(textarea); jbutton btnnewbutton = new jbutton("\u4fdd\u5b58\u6587\u672c"); btnnewbutton.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { jfilechooser jfchooser=new jfilechooser(); if(jfchooser.showsavedialog(null)== jfilechooser.approve_option) { file f=jfchooser.getselectedfile(); try { filewriter fw=new filewriter(f); string str=textarea_1.gettext(); fw.write(str); fw.close(); } catch(ioexception e1) { e1.printstacktrace(); } } } }); btnnewbutton.setbounds(360, 303, 93, 23); contentpane.add(btnnewbutton); jbutton btnnewbutton_1 = new jbutton("\u6253\u5f00\u5bc6\u6587"); btnnewbutton_1.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { jfilechooser fchooser=new jfilechooser(); if(fchooser.showopendialog(null)== jfilechooser.approve_option) { file f=fchooser.getselectedfile(); try { filereader fr=new filereader(f); try { int n=fr.read(); string str=""; char c; while(n!=-1) { c=(char)n; str+=c; n=fr.read(); } textarea_1.settext(str); fr.close(); } catch(ioexception e1) { e1.printstacktrace(); } } catch(filenotfoundexception e1) { e1.printstacktrace(); } } } }); btnnewbutton_1.setbounds(397, 31, 93, 23); contentpane.add(btnnewbutton_1); jbutton btnnewbutton_2 = new jbutton("<<\u7ffb\u8bd1"); btnnewbutton_2.addactionlistener(new actionlistener() { public void actionperformed(actionevent e) { string str2=textarea_1.gettext(); string str1=""; for(int i=0;i<str2.length();i++) { char c=str2.charat(i); c=(char)(c-999); str1+=c; } textarea.settext(str1); } }); btnnewbutton_2.setbounds(129, 31, 93, 23); contentpane.add(btnnewbutton_2); } public jia_mi(frame f) { // todo 自动生成的构造函数存根 } }
到此这篇关于java可视化之实现文本的加密和解密的文章就介绍到这了,更多相关java实现文本的加密和解密内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读