Java可視化之實現(xiàn)文本的加密和解密
一、題目
編寫一個Java程序,實現(xiàn)一個文本信息的加密。
二、要求
可視化界面,友好的輸入和輸出,文件的存取。
三、分析
所謂數(shù)據(jù)加密(Data Encryption)技術(shù)是指將一個信息(或稱明文,plain text)經(jīng)過加密鑰匙(Encryption key)及加密函數(shù)轉(zhuǎn)換,變成無意義的密文(cipher text),而接收方則將此密文經(jīng)過解密函數(shù)、解密鑰匙(Decryption key)還原成明文。
四、界面規(guī)劃
登錄驗證界面

建立基本框架,基于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)
五、功能實現(xiàn)
5.1 確定功能實現(xiàn)
當use_name和password都正確時,跳轉(zhuǎn)到下一界面,否則按下正確按鈕時,將輸入的字符串重置為空。
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 退出功能實現(xiàn)
正常退出,程序正常執(zhí)行結(jié)束退出
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 類實現(xiàn)的。
5.3 加密文本的產(chǎn)生
在caretUpdate()函數(shù)中,先取到用戶輸入的字符然后依次將這些字符轉(zhuǎn)為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);
}
六、功能測試
登錄

賬號和密碼不同時為對時,賬號框和密碼框重置。

密碼和賬號同時為對時,進入加密和解密界面。

文本與加密文本的轉(zhuǎn)換。


保存的文件。
打開密文方法與以上相同。

將密文(Unicode編碼)轉(zhuǎn)換明文。
將程序?qū)С鰹橐粋€可執(zhí)行的Java軟件

桌面可執(zhí)行軟件。
步驟:File-Export-選擇main函數(shù)所在類-選擇導(dǎo)出的位置。
七、程序源碼
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 自動生成的構(gòu)造函數(shù)存根
}
}
到此這篇關(guān)于Java可視化之實現(xiàn)文本的加密和解密的文章就介紹到這了,更多相關(guān)Java實現(xiàn)文本的加密和解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java必懂的冷知識點之Base64加密與解密
- plsql實現(xiàn)DES對稱加密 Java解密
- Java AES加密和解密教程
- java 實現(xiàn)DES 加密解密的示例
- Java實現(xiàn)md5和base64加密解密的示例代碼
- Java上傳下載文件并實現(xiàn)加密解密
- java使用RSA加密方式實現(xiàn)數(shù)據(jù)加密解密的代碼
- Java AES256加密解密示例代碼
- 如何通過Java實現(xiàn)加密、解密Word文檔
- java使用RSA與AES加密解密的實例代碼詳解
- java使用Base64實現(xiàn)文件加密解密
- java使用異或?qū)ξ募M行加密解密
- java實現(xiàn)微信小程序加密數(shù)據(jù)解密算法
相關(guān)文章
SpringBoot+MybatisPlus+代碼生成器整合示例
這篇文章主要介紹了SpringBoot+MybatisPlus+代碼生成器整合示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Java中的StringTokenizer實現(xiàn)字符串切割詳解
這篇文章主要介紹了Java中的StringTokenizer實現(xiàn)字符串切割詳解,java.util工具包提供了字符串切割的工具類StringTokenizer,Spring等常見框架的字符串工具類(如Spring的StringUtils),需要的朋友可以參考下2024-01-01
SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫分表
本文主要介紹了SpringBoot+MybatisPlus+Mysql+Sharding-JDBC分庫分表,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03

