`

Java 文件加密传输与解密算法终极产品版(三)

阅读更多

    在开始码字前先把产品的截图摆上:

 

  这个文件处理的实现具备的功能有:文件读取,文件写入,文件复制,文件加密以及文件解密。

 

  其实在平时文件加密的操作中,我们可以简单的通过修改文件的后缀名来改变文件的打开方式,也就是常说的:“一定是我打开的方式不对。。。”,但是这样的操作方法就比较low(低端)。

所以下面我们来一些比较高大上的。


   整个实例的难点应该还是在于文件的加密以及解密,对于PC里的一些不想为人知的文件往往需要加密处理。通过对文件输入流的方法调用得到文件的字节流:

FileInputStream  fis = new FileInputStream(from);
int n = fis.read();

 然后在调用文件输出流方法时对读取到的字节流进行一定的按特定意愿的处理后并输出:

//循环写入
		while(n!=-1){//加密算法,可行定义,与解密算法相逆
			if(day%height*n != 1){
				fos.write(n+height);
//day和height为密码			
                             }else{
				fos.write(n);
			}
			n=fis.read();
		}

 这样就可以在文件输出时出现字节流的“误差”,原文本被“错乱”的解码方式所还原,便会生成乱码或者一堆看不懂的文件。其中的参数day和height是密码和校验码,可以是生日和身高的整型数据组合。

 

加密和解密的方法:

/**
	 * 文件加密传输的方法
	 * @param from原文件(带绝对路径)
	 * @param to复制后文件(带绝对路径)
	 * @throws Exception抛出异常
	 */
	public void JiaMi(String from,String to,int day,int height) throws Exception{
		FileInputStream  fis = new FileInputStream(from);
		FileOutputStream fos = new FileOutputStream(to,false);
		int n = fis.read();
		int count=0;
		//循环写入
		while(n!=-1){//加密算法,可行定义,与解密算法相逆
			if(day%height*n != 1){
				fos.write(n+height);
			}else{
				fos.write(n);
			}
			n=fis.read();
		}
		fis.close();
		fos.close();
	}
	/**
	 * 文件解密接收的方法
	 * @param from原文件(带绝对路径)
	 * @param to复制后文件(带绝对路径)
	 * @throws Exception抛出异常
	 */
	public void JieMi(String from,String to,int day,int height) throws Exception{
		FileInputStream  fis = new FileInputStream(from);
		FileOutputStream fos = new FileOutputStream(to,false);
		int n = fis.read();
		//循环写入
		while(n!=-1){//解密算法,可行定义,与解密算法相逆
			if(day%height*n != 1){
				fos.write(n-height);
			}else{
				fos.write(n);
			}
			n=fis.read();
		}
		//关闭输入输出流
		fis.close();
		fos.close();
	}

 

 下面上产品实例代码:

UI类:

package czj_javaIO;

import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class MainUI extends JFrame{

	public static void main(String[] args) {
		MainUI mu = new MainUI();
		mu.init();
	}
	/**
	 * 初始化界面的方法
	 */
	private void init() {
		this.setTitle("文件处理");
		this.setSize(395, 850);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(3);
		this.setLayout(new FlowLayout());
		this.setResizable(false);
		addBackground();
		JLabel j1 = new JLabel("    文件名 :        ");
		JTextArea jp1  = new JTextArea(2, 30);
		jp1.setText("测试用文件.txt");
		
		JLabel j2 = new JLabel("文件绝对路径:");
		JTextArea jp2  = new JTextArea(2, 30);
		jp2.setText("E://");
		
		JLabel j3 = new JLabel("     内容  :          ");
		JTextArea jp3  = new JTextArea(5, 30);
		jp3.setText("这是测试文件的具体内容。");
		
		this.add(j1);
		this.add(jp1);
		this.add(j2);
		this.add(jp2);
		this.add(j3);
		this.add(jp3);
		
		JButton jb_write = new JButton("写入文件");
		jb_write.setBorderPainted(false);
		jb_write.setFocusable(false);
		this.add(jb_write);
		
		JButton jb_read = new JButton("读取文件");
		jb_read.setBorderPainted(false);
		jb_read.setFocusable(false);
		this.add(jb_read);
		
		JLabel j4 = new JLabel("(必须已有该文件)");
		this.add(j4);

		
		JLabel jfore = new JLabel("  文件原地址  :");
		JTextArea jtfore  = new JTextArea(2, 30);
		jtfore.setText("E://测试用文件.txt");
		this.add(jfore);
		this.add(jtfore);
		
		JLabel jafter = new JLabel("文件目标地址:");
		JTextArea jtafter  = new JTextArea(2, 30);
		jtafter.setText("D://复制过来的测试用文件.txt");
		this.add(jafter);
		this.add(jtafter);
		
		JButton jb_copy = new JButton("  复  制            文  件  ");
		jb_copy.setBorderPainted(false);
		jb_copy.setFocusable(false);
		this.add(jb_copy);
		
		JLabel jjiami = new JLabel("***************************要加密的文件目标地址 :        ");
		JTextArea jtjiami  = new JTextArea(2, 30);
		jtjiami.setText("E://测试用文件.txt");
		this.add(jjiami);
		this.add(jtjiami);
		
		JLabel jjiaafter = new JLabel("***************************加密后的文件目标地址 :        ");
		JTextArea jtjiaafter  = new JTextArea(2, 30);
		jtjiaafter.setText("D://加密后的测试用文件.txt");
		this.add(jjiaafter);
		this.add(jtjiaafter);
		
		JLabel jiami = new JLabel("加密密码:");
		this.add(jiami);
		//设置加密密码
		JTextArea jtdayjia  = new JTextArea(2,6);
		jtdayjia.setText("19940805");
		this.add(jtdayjia);
		//校验码
		JTextArea jtheightjia  = new JTextArea(2, 4);
		jtheightjia.setText("185");
		this.add(jtheightjia);
		
		JButton jb_jiami = new JButton("  文  件            加  密  ");
		jb_jiami.setBorderPainted(false);
		jb_jiami.setFocusable(false);
		this.add(jb_jiami);
		
		JLabel jjiemi = new JLabel("***************************要解密的文件目标地址 :        ");
		JTextArea jtjiemi  = new JTextArea(2, 30);
		jtjiemi.setText("D://加密后的测试用文件.txt");
		this.add(jjiemi);
		this.add(jtjiemi);
		
		JLabel jjieafter = new JLabel("***************************解密后的文件目标地址 :        ");
		JTextArea jtjieafter  = new JTextArea(2, 30);
		jtjieafter.setText("E://解密后的测试用文件.txt");
		this.add(jjieafter);
		this.add(jtjieafter);
		
		JLabel jiemi = new JLabel("解密密码:");
		this.add(jiemi);
		//设置解密密码
		JTextArea jtdayjie  = new JTextArea(2, 6);
		jtdayjie.setText("19940805");
		this.add(jtdayjie);
		//校验码
		JTextArea jtheightjie  = new JTextArea(2, 4);
		jtheightjie.setText("185");
		this.add(jtheightjie);
		
		JButton jb_jiemi = new JButton("  文  件            解  密  ");
		jb_jiemi.setBorderPainted(false);
		jb_jiemi.setFocusable(false);
		this.add(jb_jiemi);
		
		//用以反馈当前文件处理状态
		JLabel now = new JLabel();
		this.add(now);
		
		//给按钮添加监听器
		MainIOListener il = new MainIOListener(jp1,jp2,jp3,jtfore,jtafter,jtjiami,jtjiaafter,jtjiemi,jtjieafter,jtdayjia,
				jtheightjia,jtdayjie,jtheightjie,now);
		jb_write.addActionListener(il);
		jb_read.addActionListener(il);
		jb_copy.addActionListener(il);
		jb_jiami.addActionListener(il);
		jb_jiemi.addActionListener(il);
		
		this.setVisible(true);
	}
	/**
	 * 添加背景的方法
	 */
	private void addBackground(){
		ImageIcon image=new ImageIcon(this.getClass().getResource("123.jpg"));
		JLabel jlaImage=new JLabel(image);
		jlaImage.setBounds(0, -35, image.getIconWidth(), image.getIconHeight());
		this.getLayeredPane().add(jlaImage,new Integer(Integer.MIN_VALUE));
		JPanel contentpane=(JPanel)this.getContentPane();
		contentpane.setOpaque(false);
		}

}

 监听器类:

package czj_javaIO;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JLabel;
import javax.swing.JTextArea;

public class MainIOListener implements ActionListener{

	private JTextArea jp1,jp2,jp3,jtfore,jtafter,jtjiami,jtjiaafter,jtjiemi,jtjieafter;
	private int jtdayjia,jtheightjia,jtdayjie,jtheightjie;
	private JLabel now;
	public MainIOListener(JTextArea jp1, JTextArea jp2, JTextArea jp3,
			JTextArea jtfore, JTextArea jtafter, JTextArea jtjiami,
			JTextArea jtjiaafter, JTextArea jtjiemi, JTextArea jtjieafter,JTextArea jtdayjia,
			JTextArea jtheightjia,JTextArea jtdayjie,JTextArea jtheightjie,JLabel now) {
		this.jp1 = jp1;
		this.jp2 = jp2;
		this.jp3 = jp3;
		this.jtfore = jtfore;
		this.jtafter =jtafter;
		this.jtjiami = jtjiami;
		this.jtjiaafter = jtjiaafter;
		this.jtjiemi = jtjiemi;
		this.jtjieafter = jtjieafter;
		//String装换为int
		this.jtdayjia = Integer.parseInt(jtdayjia.getText());
		this.jtdayjie =Integer.parseInt(jtdayjie.getText());
		this.jtheightjia = Integer.parseInt(jtheightjia.getText());
		this.jtheightjie = Integer.parseInt(jtheightjie.getText());
		
		this.now = now;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand().equals("写入文件")){
			JavaIO jio = new JavaIO();
			try {
				jio.writeFile(jp3.getText(),jp2.getText()+jp1.getText());
				now.setText("文件已写入");
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}else if(e.getActionCommand().equals("读取文件")){
			JavaIO jio = new JavaIO();
			jio.readFile(jp2.getText()+jp1.getText());
			now.setText("文件已读取");
			
		}else if(e.getActionCommand().equals("  复  制            文  件  ")){
			JavaIO jio = new JavaIO();
			try {
				jio.copy(jtfore.getText(), jtafter.getText());
				now.setText("文件已复制");
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}else if(e.getActionCommand().equals("  文  件            加  密  ")){
			JavaIO jio = new JavaIO();
			try {
				jio.JiaMi(jtjiami.getText(), jtjiaafter.getText(),jtdayjia,jtheightjia);
				now.setText("文件已加密");
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}else if(e.getActionCommand().equals("  文  件            解  密  ")){
			JavaIO jio = new JavaIO();
			try {
				jio.JieMi(jtjiemi.getText(), jtjieafter.getText(),jtdayjie,jtheightjie);
				now.setText("文件已解密");
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}
	}
}

 主要实现方法类:

package czj_javaIO;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class JavaIO {
	
	private File currentFile;
	public static void main(String[] args) throws Exception {
		JavaIO ja = new JavaIO();
		ja.findFiles("E:/");
//		ja.readFile("E://类与对象总结.txt");
//		ja.writeFile("这是写入文件的内容。","E://类与对象总结11.txt");
//		ja.JiaMi("E://类与对象总结.txt", "D://加密后的类与对象总结.png");
//		ja.JieMi("D://加密后的类与对象总结.png","E://解密后类与对象总结.txt" );
//		ja.copy("E://类与对象总结.txt", "E://类与对象总结的复制文件.txt");
	}
	/**
	 * 查找文件
	 * @param 查找目录
	 */
	public void findFiles(String s){
		File file = new File(s);
		File[] f = file.listFiles();
//		System.out.println(f);
		for(int i = 0;i<f.length;i++){
			 currentFile = f[i];
			 if(currentFile.isDirectory()){
				findFiles(currentFile.getAbsolutePath());
			}
			if(currentFile.getName().endsWith("txt"))
			System.out.println(currentFile);
		}
	}
	/**
	 * 读取文件
	 * @param s文件名(带绝对路径)
	 */
	public void readFile(String s){
		try {
			FileInputStream  fis = new FileInputStream(s);
			int n=fis.read();
			while(n!=-1){
				System.out.println("字节:"+n);
			    n = fis.read();
			}
			fis.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 写文件的方法
	 * @param msg写入的内容
	 * @param s文件绝对路径
	 * @throws Exception抛出异常
	 */
	public void writeFile(String msg,String s) throws Exception{
		try {
			FileOutputStream fos = new FileOutputStream(s,false);
			byte[] b = msg.getBytes();//得到组成字符串的字节
			fos.write(b);
			fos.close();//关闭输出流 
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 复制文件
	 * @param from原文件(带绝对路径) 
	 * @param to 复制后文件(带绝对路径)
	 * @throws Exception
	 */
	public void copy(String from,String to) throws Exception{
		FileInputStream  fis = new FileInputStream(from);
		FileOutputStream fos = new FileOutputStream(to,false);
		int n = fis.read();
		//循环写入
		while(n!=-1){
				fos.write(n);
			n=fis.read();
		}
		//关闭输入输出流
		fis.close();
		fos.close();
	}
	/**
	 * 文件加密传输的方法
	 * @param from原文件(带绝对路径)
	 * @param to复制后文件(带绝对路径)
	 * @throws Exception抛出异常
	 */
	public void JiaMi(String from,String to,int day,int height) throws Exception{
		FileInputStream  fis = new FileInputStream(from);
		FileOutputStream fos = new FileOutputStream(to,false);
		int n = fis.read();
		int count=0;
		//循环写入
		while(n!=-1){//加密算法,可行定义,与解密算法相逆
			if(day%height*n != 1){
				fos.write(n+height);
			}else{
				fos.write(n);
			}
			n=fis.read();
		}
		fis.close();
		fos.close();
	}
	/**
	 * 文件解密接收的方法
	 * @param from原文件(带绝对路径)
	 * @param to复制后文件(带绝对路径)
	 * @throws Exception抛出异常
	 */
	public void JieMi(String from,String to,int day,int height) throws Exception{
		FileInputStream  fis = new FileInputStream(from);
		FileOutputStream fos = new FileOutputStream(to,false);
		int n = fis.read();
		//循环写入
		while(n!=-1){//解密算法,可行定义,与解密算法相逆
			if(day%height*n != 1){
				fos.write(n-height);
			}else{
				fos.write(n);
			}
			n=fis.read();
		}
		//关闭输入输出流
		fis.close();
		fos.close();
	}
	
}

  

 

     在测试时需要注意的是必须先写入文件,否则后面的操作都将因为找不到对象而报这样的错:java.io.FileNotFoundException: E:\测试用文件.txt (系统找不到指定的文件。)

 

   总体来说代码量还是不少的,监听器类的构建主要还是涉及到许多参数的传递会比较麻烦。UI类在布局的调整上下了很大的功夫。。。

 

    加解密文件的方法里的算法可以根据自己的设定进行修改哦。

 

                                                                                                                          梣梓cenzi

                                                                                                                         2015-05-09

  • 大小: 129.1 KB
3
4
分享到:
评论

相关推荐

    Java实现的RSA加密解密算法示例

    本文详细介绍了Java实现的RSA加密解密算法,包括密钥对生成、公钥和私钥的使用、加密和解密、密钥文件的生成等知识点。这些知识点对于Java开发者来说非常重要,可以帮助他们更好地理解和实现RSA加密解密算法。

    java实现文件加密解密

    Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,减少了应用程序本身的大小...

    java实现MD5加密解密算法

    java实现MD5加密解密算法,java源代码~

    Java文本文件加密与解密

    本次使用JAVA语言,采用3DES加密算法进行对文本文件的加密,通过二进制和十六进制的转换来实现,产生加密文件,再对加密文件进行解密。 关键词:DES加密算法、加密、解密。摘要 随着现代网络技术的飞速发展,人们...

    java实现的RC4加密解密算法示例

    "java实现的RC4加密解密算法示例" RC4加密解密算法是Symmetric-key block cipher的一种,使用同一个密钥进行加密和解密。java实现的RC4加密解密算法可以通过以下步骤实现: 1. 初始化数组:创建一个大小为256的...

    Java实现AES加密和解密算法

    在Java中实现AES(Advanced Encryption Standard)加密和解密算法主要涉及到对称密钥加密技术。AES算法是一种块密码,采用固定大小的128位(16字节)块进行加密和解密,支持128、192和256位的密钥长度。在给定的代码...

    Java 文件加密传输

    本项目"Java 文件加密传输"就是针对这一需求而设计的,它利用了DES、RSA和MD5三种加密算法来确保文件在传输过程中的安全。下面我们将详细探讨这些技术及其在Java中的应用。 首先,DES(Data Encryption Standard)...

    加密和解密文件

    在IT领域,文件的安全性是至关重要的,尤其是在网络传输、存储和共享时。"加密和解密文件"的主题涉及到信息安全的核心技术,它确保了数据在未经授权的情况下无法被访问或理解。这里的描述提到这是一个带有图形用户...

    JAVA 使用数字证书加密解密文件

    本文将深入探讨如何使用Java语言结合RSA算法,通过数字证书实现文件的加密和解密操作。RSA是一种非对称加密算法,它的核心在于一对密钥:公钥和私钥。公钥可以公开给任何人,用于加密数据;而私钥必须保密,用于解密...

    java加密解密算法大全

    ### Java加密解密算法详解 #### 一、加密概述与应用 加密技术是信息安全领域中的关键技术之一,其核心在于通过特定算法对原始信息(明文)进行变换,使其成为不可直接阅读的形式(密文),从而保护信息在传输或...

    文件加密解密算法研究与实现

    ### 文件加密解密算法研究与实现 #### 一、引言 随着信息技术的快速发展和互联网的普及,信息安全问题变得越来越重要。特别是在企业环境中,保护重要信息免受非法访问和泄露至关重要。《文件加密解密算法研究与...

    des加密算法(js+java)js加密 java解密

    des加密算法(js+java)加密与解密结果相同 包含三个文件 : des.js des.html ,用于实现前端脚本的加密与解密 des.java 用于后台的加密解密操作; 项目中正好用到,已经过验证,两个加密解密结果相同,分享给...

    很强的Java加密解密算法源码.zip

    在这个"很强的Java加密解密算法源码.zip"中,我们可以深入学习如何在Java中实现3DES算法来加密和解密文件。 3DES算法是一种块加密算法,它通过三次应用DES密钥来增强安全性。基本流程如下: 1. **加密过程**:输入...

    各种加密与解密算法

    本文将深入探讨几种常见的加密和解密算法,包括AES、DES、MD5、SHA以及DSA,并结合Java编程语言,讨论如何实现这些算法。 首先,我们来了解基本的加密与解密概念。加密是将明文数据转换成无法被轻易理解的密文,以...

    加密与解密(java课程设计)

    在这个Java课程设计中,我们将深入探讨如何使用Java实现文件的加密和解密过程。 首先,我们需要理解加密的基本概念。加密是一种将明文数据转换为难以理解的形式(密文)的过程,目的是防止未经授权的访问者获取信息...

    基于JAVA文件加解密的实验报告

    设计目标包括利用特定加密算法对文本文件进行加密和解密,支持RSA、DES、MD5等加密算法,并能通过命令行方式进行程序操作。 在设计过程中,关键的抽象数据类型和类库被充分利用。导入了java.awt.*和java.awt.event....

    VB6加密解密算法,支持文件加密解密

    在VB6.0环境下开发的这个程序主要关注的是数据安全领域,特别是文件的加密与解密功能。VB(Visual Basic)是一种由微软公司推出的事件驱动编程语言,它以其易用性和丰富的控件库深受程序员喜爱。在这个特定的项目中...

    c/c++ 与java互通 AES加密解密,算法ECB

    压缩包里有两个工程,一个vc6.0一个myeclipse,本帖是修复贴,原帖地址c/c++ 与java互通 AES加密解密,算法ECB/PKCS5PADDING http://download.csdn.net/download/wangsonghiweed/4328267 -来自CSDN,有童鞋反映有...

    基于Java的文件加密与解密

    在IT行业中,文件的安全性是至关重要的...总的来说,基于Java的文件加密与解密技术涉及到IO流操作、密码学原理、对称加密算法以及密钥管理等多个核心知识点。通过合理的编程设计,能够为用户提供安全、便捷的数据保护。

    java文件加密和解密

    本文将深入探讨Java中实现文件加密和解密的原理与方法。 一、加密技术概述 1. 加密的目的:隐藏信息,防止未经授权的访问,确保数据的安全性。 2. 加密的基本原理:通过特定的算法(加密算法)将明文转化为不可读的...

Global site tag (gtag.js) - Google Analytics