Java可视化之实现文本的加密和解密

 更新时间:2021年5月1日 10:01  点击:1799

一、题目

编写一个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实现文本的加密和解密内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!

[!--infotagslink--]

相关文章

  • Java实现经典游戏复杂迷宫

    这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
  • java 运行报错has been compiled by a more recent version of the Java Runtime

    java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01
  • 在java中获取List集合中最大的日期时间操作

    这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • 教你怎么用Java获取国家法定节假日

    这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
  • Java如何发起http请求的实现(GET/POST)

    这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
  • 浅谈Java与C#的一些细微差别

    说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
  • 解决Java处理HTTP请求超时的问题

    这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
  • java 判断两个时间段是否重叠的案例

    这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
  • vue接口请求加密实例

    这篇文章主要介绍了vue接口请求加密实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
  • java 画pdf用itext调整表格宽度、自定义各个列宽的方法

    这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31
  • 超简洁java实现双色球若干注随机号码生成(实例代码)

    这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
  • Java生成随机姓名、性别和年龄的实现示例

    这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
  • AES加密解密的例子小结

    关于AES加密的算法我们就不说了,这里主要给各位演示了三个关于AES算法实现的加密例子,希望本文章能给你带来帮助。 话不多说,先放上代码,一共有两个文件:AES.php(aes算...2016-11-25
  • node.JS md5加密中文与php结果不一致怎么办

    这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
  • java正则表达式判断前端参数修改表中另一个字段的值

    这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
  • Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)

    这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15
  • Java开发实现人机猜拳游戏

    这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
  • php威盾解密的例子分享

    下面来给大家分享两个关于php威盾解密的例子,一个是批量解密一个是超级算法的解密都非常的好,大家有举的进入参考。 例子,批量解密 代码如下 复制代码 ...2016-11-25