`

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实现MD5加密解密算法

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

    Java文本文件加密与解密

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

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

    主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了java RAS加密解密算法的相关实现技巧,需要的朋友可以参考下

    java实现文件加密解密

    利用java实现将资源文件(包括图片、动画等类型)进行简单的加密、解密

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

    主要介绍了java实现的RC4加密解密算法,结合具体实例形式分析了java RC4加密解密算法的实现与使用技巧,需要的朋友可以参考下

    Java实现AES加密和解密算法

    本文就简单介绍如何通过JAVA实现AES加密: /** * 测试AES加密和解密 * @param args */ public static void main(String[] args) { /**数据初始化**/ String content = "http://www.mbaike.net"; String...

    文件加密与解密的java代码

    文件名:FileEncrypter.java JDK:1.40以上 说明:文件加密 加密方法:三重DES加密 加密过程:对选中的文件加密后在同文件夹下生成一个增加了".tdes"扩展名的加密文件 (完美加密,更改后缀名也不可以打开)解密过程:...

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

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

    文件加密解密算法(Java源码)

    文件加密解密算法(Java源码) java,file,算法,加密解密,java源码 package com.crypto.encrypt; import java.security.SecureRandom; import java.io.*; import javax.crypto.spec.DESKeySpec; import javax.crypto...

    加密和解密文件

    加密和解密文件,有GUI界面,很好用,代码完整,加密解密效率高。

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

    从cnki上下载的 文件加密解密算法研究与实现——基于USBKEY的文件加密解密方案

    文件移位加密与解密

    文件移位加密与解密 C语言实现 完整代码 截图显示

    Java 文件加密解密器

    Java 文件加密解密器 可对所有文件进行加密和解密,第一次运行加密,第二次运行解密。

    JAVA加密与解密的艺术--第2版.rar

    实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非对称加密算法、数字签名算法等现今流行的加密算法的原理进行了全面而深入的剖析,而且还结合翔实的范例说明了各种算法的具体应用场景;综合应用篇既...

    java加密解密算法大全

    用java代码写的流行的加密解密算法的实现

    java加密解密算法小实例

    一个很实用的java的加密和解密算法的小实例,大家可以参考一下!!

    JAVA加密与解密的艺术 第2版 pdf part2

    《Java加密与解密的艺术(第2版)》由梁栋著,以Java中的加密API和加密算法为切入点,全面介绍了Java SE 7的特性,及其中与安全相关的各种API,详细讲解了各种流行的加密算法及其在实际中的应用,为Java开发工程师和...

    des加密算法(js+java)加密与解密结果相同

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

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

    这是本人完成的课程设计,内容是用java语言实现对文件的加密解密操作,算法采用的是3DES

    300多种加密解密算法(C++)源代码

    300多种加密解密算法(C++)源代码 300多种加密解密算法(C++)源代码

Global site tag (gtag.js) - Google Analytics