`

java文件加密和解密

阅读更多

Java文件加密和解密

本软件的制作原理是:文件的读写,拷贝。通过从一个文件中读取字节,在写入时加上一个偏移量来实现加密功能,解密则返过来,即减去一个相同的偏移量。

本软件的优点是:1.实现了大文件的加密,对视频,歌曲,文本文件等都是可以的。2.大文件加密的时候,加了线程处理,不会造成按钮按下去后,要到加密或解密完成时才能弹起,给用户造成不便。3.软件的基本健壮性已经实现,加密或解密完成时,会弹出一个提示窗口,若没弹出,则代表没有完成加密或解密。4,.软件是使用了2个下拉框来实现的,方便用户使用,输入的加密的码的范围是00~99,一共100个,即破解率为1%。5.本软件是把用户的加密的码写入了用户的文件中,待到用户解密时,就会获取那个加入的加密的码,与用户输入的解密的码相比较,这实现了多个文件的压缩。6.本软件新加了进度条,能反映加密过程。

本软件有待升级的地方:1.加密解密大文件是速度较慢,请耐心等待。2.加密或解密是针对原文件的,若是加密失败,原文件会被破坏,用户使用时,一定要先备份,先试一下加密和解密是否成功,若是成功了,再对原文件加密。

 

接下来附上源代码:

这是加密解密和进度条界面的代码:

package ctong17;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JTextField;



public class FileLock {
//		private static int rate;
		private static JProgressBar jpr = new JProgressBar();
	    private static FileInputStream fis; 
	    private static JComboBox box,box1,box2,box3;
		private static File f,file,file1 ;
		private static JTextField jt1,jt3;   
		/**
		 * 文件加密界面
		 */
		public static void init_ya(){
	    	final JFrame jf_ya=new JFrame();
	    	jf_ya.setTitle("文件加密系统");
	    	jf_ya.setLocation(530,175);
	    	jf_ya.setResizable(false);
	    	jf_ya.setSize(300, 300);
	    	jf_ya.setIconImage(new ImageIcon("4.gif").getImage());//添加方框的图标
	    	
	    	JPanel center = new JPanel();
	    	center.setLayout(new GridLayout(2,3));
	    	JPanel south = new JPanel();
	    	
	    	JButton btn_ya = new JButton("开始加密(Enter)");
	    	JButton btn_fanhui = new JButton("返回(Backspace)");
	    	JButton btn_xuanze = new JButton("选择");
	    	//这是下拉框
	    	box =new JComboBox();
	    	box.addItem("0");
	    	box.addItem("1");
	    	box.addItem("2");
	    	box.addItem("3");
	    	box.addItem("4");
	    	box.addItem("5");
	    	box.addItem("6");
	    	box.addItem("7");
	    	box.addItem("8");
	    	box.addItem("9");
	    	box1 =new JComboBox();
	    	box1.addItem("0");
	    	box1.addItem("1");
	    	box1.addItem("2");
	    	box1.addItem("3");
	    	box1.addItem("4");
	    	box1.addItem("5");
	    	box1.addItem("6");
	    	box1.addItem("7");
	    	box1.addItem("8");
	    	box1.addItem("9");
	    	
	    	jt1 = new JTextField();
	    	
	    	JLabel jl1 = new JLabel("选择加密文件:",JLabel.CENTER);
	    	JLabel jl2 = new JLabel("加密码:",JLabel.CENTER);
	    	JLabel jl3=new JLabel(new ImageIcon("6.gif"));
	    	jl3.setPreferredSize(new Dimension(30,180));
	    	
	    	center.add(jl1);
	    	center.add(jt1);
	    	center.add(btn_xuanze);
	    	center.add(jl2);
	    	center.add(box);
	    	center.add(box1);
	    	south.add(btn_ya);
	    	south.add(btn_fanhui);
	    	
	    	jf_ya.add(jl3,BorderLayout.NORTH);
	    	jf_ya.add(center,BorderLayout.CENTER);
	    	jf_ya.add(south,BorderLayout.SOUTH);
	    	
	    	jf_ya.setVisible(true);
	    	//返回按钮
	    	btn_fanhui.addActionListener(new ActionListener() {
	    		
	    		public void actionPerformed(ActionEvent e) {
	    			jf_ya.setVisible(false);
	    			init_First();
	    		}
	    	});
	    	//选择文件按钮
	    	btn_xuanze.addActionListener(new ActionListener() {
	    		
	    		public void actionPerformed(ActionEvent e) {
	    			//打开文件选择器
	    			JFileChooser jc = new JFileChooser();
	    			jc.showOpenDialog(jf_ya);
	    			file = jc.getSelectedFile();
	    			
	    			//获取文件的绝对路径
	    			jt1.setText(file.getAbsolutePath());
	    		}
	    	});
	    	//加密按钮
	    	btn_ya.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					//这个文件是中转文件,用来缓冲的
//					f = new File(file.toURI());
					f= new File("1.txt"); 
					//线程,处理加密文件过程
					YaThread yt = new YaThread(jpr, file,f, jt1, box, box1);
					yt.start();
					
				}
			});
	    }
	    /*
	     * 这是主的界面
	     */
	    public static void init_First(){
	    	final JFrame jf_first = new JFrame("文件加密系统");
	    	
	    	jf_first.setSize(300,300);
	    	jf_first.setLocation(530,175);
	    	jf_first.setResizable(false);
	    	jf_first.setDefaultCloseOperation(3);
	    	jf_first.setIconImage(new ImageIcon("4.gif").getImage());//添加方框的图标
	    	
	    	JPanel pa = new JPanel();
	    	pa.setLayout(new GridLayout(1,2));
	    	JButton btn_ya = new JButton("加密");
	    	JButton btn_jie = new JButton("解密");
	    	
	    	JLabel jl3=new JLabel(new ImageIcon("1.gif"));
	    	jl3.setPreferredSize(new Dimension(30,240));
	    	
	    	pa.add(btn_ya);
	    	pa.add(btn_jie);
	    	
	    	jf_first.add(jl3,BorderLayout.NORTH);
	    	jf_first.add(pa,BorderLayout.CENTER);
	    	
	    	jf_first.setVisible(true);
	    	//解密按钮
	    	btn_jie.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					init_jie();
					jf_first.setVisible(false);
				}
			});
	    	//加密按钮
	    	btn_ya.addActionListener(new ActionListener() {
	    		public void actionPerformed(ActionEvent e) {
	    			init_ya();
	    			
	    			jf_first.setVisible(false);
	    		}
	    	});
	    }
	    /*
	     * 这是解密的界面
	     */
	    public static void init_jie(){
	    	final JFrame jf_jie=new JFrame("文件解密系统");
	    	
	    	jf_jie.setLocation(530,175);
	    	jf_jie.setResizable(false);
	    	jf_jie.setSize(300, 300);
	    	jf_jie.setIconImage(new ImageIcon("4.gif").getImage());//添加方框的图标
	    	
	    	JPanel center = new JPanel();
	    	//中间面板设置表格布局
	    	center.setLayout(new GridLayout(2,3));
	    	JPanel south = new JPanel();
	    	
	    	JButton btn_jie = new JButton("开始解密(Enter)");
	    	JButton btn_fanhui = new JButton("返回(Backspace)");
	    	JButton btn_xuanze = new JButton("选择");
	    	//这是下拉框
	    	box2 =new JComboBox();
	    	box2.addItem("0");
	    	box2.addItem("1");
	    	box2.addItem("2");
	    	box2.addItem("3");
	    	box2.addItem("4");
	    	box2.addItem("5");
	    	box2.addItem("6");
	    	box2.addItem("7");
	    	box2.addItem("8");
	    	box2.addItem("9");
	    	box3 =new JComboBox();
	    	box3.addItem("0");
	    	box3.addItem("1");
	    	box3.addItem("2");
	    	box3.addItem("3");
	    	box3.addItem("4");
	    	box3.addItem("5");
	    	box3.addItem("6");
	    	box3.addItem("7");
	    	box3.addItem("8");
	    	box3.addItem("9");
	    	
	    	 jt3 = new JTextField(6);
	    	 
	    	JLabel jl1 = new JLabel("选择解密文件:",JLabel.CENTER);
	    	JLabel jl2 = new JLabel("解密码:",JLabel.CENTER);
	    	JLabel jl3=new JLabel(new ImageIcon("8.gif"));
	    	jl3.setPreferredSize(new Dimension(30,180));
	    	
	    	center.add(jl1);
	    	center.add(jt3);
	    	center.add(btn_xuanze);
	    	center.add(jl2);
	    	center.add(box2);
	    	center.add(box3);
	    	south.add(btn_jie);
	    	south.add(btn_fanhui);
	    	
	    	jf_jie.add(jl3,BorderLayout.NORTH);
	    	jf_jie.add(center,BorderLayout.CENTER);
	    	jf_jie.add(south,BorderLayout.SOUTH);
	    	
	    	jf_jie.setVisible(true);
	    	//选择文件的按钮
	    	btn_xuanze.addActionListener(new ActionListener() {
	    		public void actionPerformed(ActionEvent e) {
	    			//文件选择器,选择解密文件
	    			JFileChooser jc = new JFileChooser();
	    			jc.showOpenDialog(jf_jie);
	    			file1 = jc.getSelectedFile();
	    			//获取文件的绝对路径,显示
	    			jt3.setText(file1.getAbsolutePath());
	    			
	    		}
	    	});
	    	//返回按钮
	    	btn_fanhui.addActionListener(new ActionListener() {
	    		public void actionPerformed(ActionEvent e) {
	    			jf_jie.setVisible(false);
	    			init_First();
	    		}
	    	});
	    	//解密按钮
	    	btn_jie.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					//线程,用来处理解密文件的过程
					JieThread jt = new JieThread(jpr, fis, f, jt3, box2, box3,file1);
					jt.start();
				}
				});
	    }
//	    public FileLock(int rate){
//	    	this.rate=rate;
//	    }
	    //进度条界面
	    public static void JProgress_Bar(){
			JFrame jf = new JFrame("进度");
			jf.setSize(300,90);
			jf.setLocation(530,435);
			jf.setAlwaysOnTop(true);
			jpr.setMinimum(0);
			jpr.setPreferredSize(new Dimension(200,30));
			jpr.setBackground(Color.WHITE);
			jpr.setForeground(Color.BLUE);
			jpr.setStringPainted(true);
			jf.setLayout(new FlowLayout());
			jf.add(jpr);
			jf.setVisible(true);
			
		}
	    
	public static void main(String[] args) {
		init_First();
	}
	
		

}

 以下分别是加密,解密的线程(用来处理加密 解密):

 

package ctong17;

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

import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.JTextField;

public class YaThread extends Thread{
	private static JProgressBar jpr;
	private static int rate=0;
	private static int count=0,count1=0;
	private File f,file;
	private static JTextField jt1;
	private static FileInputStream fis; 
    private static FileOutputStream fos; 
    private static JComboBox box,box1;
	private static int t1,t2;
	//构造函数,把需要的数据传输过来
	public YaThread(JProgressBar jpr,File file,File f,JTextField jt1,JComboBox box,JComboBox box1){
		this.jpr=jpr;
		this.file=file;
		this.f=f;
		this.jt1=jt1;
		this.box=box;
		this.box1=box1;
	}
	public void run(){
		if(jt1.getText().isEmpty()) JOptionPane.showMessageDialog(null, "请选择文件!");
		else{
			new FileLock().JProgress_Bar();
			count = (int)file.length();
			count1 = count;
			jpr.setMaximum(2*count1);
			jiami(jt1.getText(),f.getAbsolutePath());
			
			copy(f.getAbsolutePath(),jt1.getText());
			
			//删除缓冲的文件
			f.delete();
			JOptionPane.showMessageDialog(null, "加密完成!");
		}
	}
	public static void jiami(String filename,String newname ){
		try {
			final int t=count1;
			t1=Integer.parseInt(box.getSelectedItem().toString());
			t2=Integer.parseInt(box1.getSelectedItem().toString());
			
			fis =new FileInputStream(filename);
			fos =new FileOutputStream(newname);
			//文件拷贝过程
			//把用户输入的加密的码先保存在文件中,以便在以后解密时获取其的加密的码,与用户输入的解密的码比较
			fos.write(t1);
			fos.write(t2);
			int n =fis.read();
			
			while (n !=-1){
				//可以进行文件的加密和解密
				fos.write(n+10*t1+t2);
				rate=t-(--count);
				jpr.setValue(rate);
				n=fis.read();
				
			}
			
			fis.close();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//文件拷贝方法
	public static void copy(String from,String to){
		try {
			fis =new FileInputStream(from);
			fos =new FileOutputStream(to);
			//文件拷贝过程
			int n =fis.read();
			while (n !=-1){
				//可以进行文件的加密和解密
				fos.write(n);
				jpr.setValue(rate+(++count));
				n=fis.read();
				
			}
			
			fis.close();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 ************************************

 

package ctong17;

import java.awt.HeadlessException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JProgressBar;
import javax.swing.JTextField;

public class JieThread extends Thread{
	private static JProgressBar jpr;
	private static int rate=0;
	private static int count=0,count1=0;
	private static FileInputStream fis; 
    private static FileOutputStream fos; 
    private static JComboBox box2,box3;
	private static int t3,t4;
	private File f,file1;
	private static JTextField jt3;    
	public JieThread(JProgressBar jpr,FileInputStream fis,File f,JTextField jt3,JComboBox box2,JComboBox box3,File file1){
		this.jpr=jpr;
		this.fis=fis;
		this.f=f;
		this.jt3=jt3;
		this.box2=box2;
		this.box3=box3;
		this.file1=file1;
		
	}
	public void run(){
		if(jt3.getText().isEmpty()) JOptionPane.showMessageDialog(null, "请选择文件!");
		else{
			
			try {
				fis = new FileInputStream(jt3.getText());
				//从文件中读取加密的码,与解密的码比较
				if(fis.read()==Integer.parseInt(box2.getSelectedItem().toString())&&fis.read()==Integer.parseInt(box3.getSelectedItem().toString())){
					//创建缓冲文件,如果各位同志没有F盘请自改,之所以不改为C盘是因为一般的用户机子里的C盘不允许访问

					new FileLock().JProgress_Bar();
					f= new File("1.txt"); 
//					f= new File(file1.toURI()); 
					count = (int)file1.length();
					count1 = count;
					jpr.setMaximum(2*count1-4);
					jiemi(jt3.getText(),f.getAbsolutePath());
					
					copy(f.getAbsolutePath(),jt3.getText());
					
					//删除缓冲文件
					f.delete();
					JOptionPane.showMessageDialog(null, "解密完成!");
				}else JOptionPane.showMessageDialog(null, "解密码不正确,请重新输入");
			} catch (NumberFormatException e1) {
				e1.printStackTrace();
			} catch (HeadlessException e1) {
				e1.printStackTrace();
			} catch (IOException e1) {
				e1.printStackTrace();
			}
		}
	}
	public static void jiemi(String filename,String newname){
		try {
			final int t=count1;	
			t3=Integer.parseInt(box2.getSelectedItem().toString());
			t4=Integer.parseInt(box3.getSelectedItem().toString());
			fis =new FileInputStream(filename);
			fos =new FileOutputStream(newname);
			//文件拷贝过程
			//跳过2个字节,即一个字的大小
			fis.skip(2);
			int n =fis.read();
			while (n !=-1){
				//可以进行文件的加密和解密
				fos.write(n-10*t3-t4);
				rate=t-(--count);
				jpr.setValue(rate);
				n=fis.read();
				
			}
			fis.close();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void copy(String from,String to){
		try {
			fis =new FileInputStream(from);
			fos =new FileOutputStream(to);
			//文件拷贝过程
			int n =fis.read();
			while (n !=-1){
				//可以进行文件的加密和解密
				fos.write(n);
				jpr.setValue(rate+(++count));
				n=fis.read();
				
			}
			fis.close();
			fos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 以下是操作的图片:



 
 

 

 
 

 

 

文件加密的可执行程序已发,感兴趣的同学可以下载!欢迎留言,我会积极采纳你们的宝贵建议或意见。

  • 大小: 64.1 KB
  • 大小: 31 KB
  • 大小: 125.3 KB
分享到:
评论

相关推荐

    加密和解密文件

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

    java实现文件加密解密

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

    Java文本文件加密与解密

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

    Java 文件加密解密器

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

    文件加密与解密的java代码

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

    Java文件加密解密

    用Java实现的一文件加密解密功能,可自己设定密钥对指定文件加密,解密

    JCT - java加密解密工具包.zip_Java加密_java 加密_jct java_加密 解密_加密工具

    java加密解密工具包

    Java加密与解密的艺术.mobi

    全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非...

    java加密解密zip压缩包

    楼上兄弟太黑,特意找的源码,2分处理,完美解决Java加密解密zip文件

    java 基于AES实现对文件的加密 解密

    java 基于AES实现对文件的加密 解密 有问题 www.willvc.com.cn 能联系到我

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

    全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、非...

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

    加密与解密(1)给定任意一个文本文件,进行加密,生成另一个文件。(2)对加密后的文件还原。

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

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

    java 文件的加密解密操作

    java 文件的加密解密操作 java 文件的加密解密操作

    RSA加密解密 JS加密 JAVA解密 【完美版】

    经过本人修改,简化并完善了别人的代码,使其更加的容易理解和学习! 此为一个完整的项目,可以直接在NetBeans IDE里运行测试。 功能:服务端随机生成密钥...用到的JS加密文件是从官网下载的最新版,速度快,稳定性好!

    Java加密与解密的艺术

    , 全书包含3个部分,基础篇对Java企业级应用的安全知识、密码学核心知识、与Java加密相关的API和通过权限文件加强系统安全方面的知识进行了全面的介绍;实践篇不仅对电子邮件传输算法、消息摘要算法、对称加密算法、...

    SM4国密加密解密JAVA代码实现.zip

    SMS4国密JAVA加密解密完整代码,无异常java类文件,导入即用。Convert.java 内部字符串进制转换类,SMS4.java 国密加密解密处理方法类。TestMain.java 测试类,调用 encrypt 加密 decode 解密

    文件移位加密与解密

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

    java课程设计加密解密

    java课程设计文件加密解密 自定义加密程序

Global site tag (gtag.js) - Google Analytics