Java批量加密解密文件简单小程序

       今天突然想起来要把我的一些文件(文本,图片文件等都可以)给加密了,那就写了一个加密解密的小程序,并不牵涉什么很厉害的算法(所以大牛勿喷),就是把一些数据加减一个固定数这么简单的加密解密,不过还是很实用的,可以批量的把当前目录下的所有文件给加密了,同时可以用解密文件把加密后的文件给解密了,程序很简单就不多解释了,很基础但扩展性和参考性还是很高的,先上图,后上源码:


运行加密文件lock.java,提示输入加密秘钥,输入任意“数字”即可,但要记住啊,因为解密时要输入这个秘钥,否者是解不开的,然后回车,就可加密,当加密成功会有提示输出“加密成功”


当加密成功后,我们就可发现java文件夹(包括子文件夹)下的所有文件(不包括程序文件)都有一个新文件产生文件名+Lock,这就是加密后的文件,打开是乱码,只有对其再解密才行。


解密的和加密的类似,故不写了,直接写源代码(代码很简单,而且我已经加注释,就不多解释了):

加密文件Lock.java

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Lock{

	/**
	 * @param args
	 */
	private static List<String> listPath=null;//源文件地址
	private static List<String> listNew=null;//加密后新文件地址
	private static int lock_Num=0;//加密的密钥
	public static void main(String[] args) throws IOException{
		Scanner sc = new Scanner(System.in); 
		listPath = new ArrayList<String>();
		listNew = new ArrayList<String>();

        System.out.print("加密秘钥:");
        lock_Num = sc.nextInt(); 
		//System.out.println(System.getProperty("user.dir"));//user.dir指定了当前的路径
        getFile(System.getProperty("user.dir"));
		preWork();
		lockFile();
	}
	 //取得当前文件夹下的所有文件的路径和名称(不包括加密解密文件)
	   private static void getFile(String path){   
	        // get file list where the path has   
	        File file = new File(path);   
	        // get the folder list   
	        File[] array = file.listFiles();   
	          
	        for(int i=0;i<array.length;i++){   
	            if(array[i].isFile()){
					if(!(array[i].getName().startsWith("Lock")||array[i].getName().startsWith("UnLock"))){
	            	listPath.add(array[i].getPath());
					//listName.add(array[i].getName());
					} 
	            }else if(array[i].isDirectory()){   
	                getFile(array[i].getPath());   
	            }   
	        }   
	    }
		//Creak new Files to save 预处理,取得加密后新文件的保存地址 
		private static void preWork(){
			for(int i=0;i<listPath.size();i++){
			String splitF[] =listPath.get(i).split("\\.");
            listNew.add(splitF[0]+"Lock"+"."+splitF[1]);
            }
		}
        //加密
		public static void lockFile() throws IOException{
         for(int i=0;i<listPath.size();i++){
		    File soure = new File(listPath.get(i));
			File save = new File(listNew.get(i));
            FileInputStream fis = new FileInputStream(soure);
			FileOutputStream fos = new FileOutputStream(save);
			int b = 0;
			while ((b = fis.read()) != -1) {
				fos.write(b - lock_Num);
				fos.flush();
			}
			fos.close();
			fis.close();

		 }
		 System.out.println("加密完成");
		}

}

解密文件UnLock.java


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class UnLock{

	/**
	 * @param args
	 */
	private static List<String> listPath=null;//保存源文件地址
	private static List<String> listNew=null;//保存解密新文件地址
	private static int unLock_Num=0;//解密秘钥
	public static void main(String[] args) throws IOException{
		Scanner sc = new Scanner(System.in); 
		listPath = new ArrayList<String>();
		listNew = new ArrayList<String>();

        System.out.print("解密秘钥:");
        unLock_Num = sc.nextInt(); 
		//System.getProperty("user.dir") user.dir指定了当前的路径
        getFile(System.getProperty("user.dir"));
		preWork();
		unLockFile();
	}
	   //取得当前文件夹下的所有文件的路径和名称(不包括加密解密文件)
	   private static void getFile(String path){   
	        // get file list where the path has   
	        File file = new File(path);   
	        // get the folder list   
	        File[] array = file.listFiles();   
	          
	        for(int i=0;i<array.length;i++){   
	            if(array[i].isFile()){
					if(!(array[i].getName().startsWith("Lock")||array[i].getName().startsWith("UnLock"))){
	            	listPath.add(array[i].getPath());
					//listName.add(array[i].getName());
					} 
	            }else if(array[i].isDirectory()){   
	                getFile(array[i].getPath());   
	            }   
	        }   
	    }
		//Creak new Files to save 预处理,取得解密后新文件的保存地址
		private static void preWork(){
			for(int i=0;i<listPath.size();i++){
			String splitF[] =listPath.get(i).split("\\.");
            listNew.add(splitF[0]+"UnLock"+"."+splitF[1]);
            }
		}
        //解密
		public static void unLockFile() throws IOException{
         for(int i=0;i<listPath.size();i++){
		    File soure = new File(listPath.get(i));
			File save = new File(listNew.get(i));
            FileInputStream fis = new FileInputStream(soure);
			FileOutputStream fos = new FileOutputStream(save);
			int b = 0;
			while ((b = fis.read()) != -1) {
				fos.write(b + unLock_Num);
				fos.flush();
			}
			fos.close();
			fis.close();

		 }
		 System.out.println("解密完成");
		}

}


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值