简单文件加密/解密

这个文件加密方法是采用异或方式对文中每个字节进行异或加密,逻辑非常简单:



文件加密代码实现:

</pre><pre name="code" class="java">package ********//<span style="color:#33cc00;">自己定义</span>;

import java.io.File;
import java.io.RandomAccessFile;
import java.util.Scanner;

public class Test1 {
	public static void main(String[] args) {
		System.out.println("输入文件路径:");
		String  s = new Scanner(System.in).nextLine();
		File f =new File(s);
		if(!f.isFile()){
			System.out.println("请输入正确的文件路径");
			return ;
			
		}
		System.out.println("KEY:");
		int key =new Scanner(System.in).nextInt();
		try {
			encrypt(f,key);
			System.out.println("加密/解密完成");
		} catch (Exception e) {
			System.out.println("加密/解密失败");
			e.printStackTrace();
		}
	}

	private static void encrypt(File f, int key) throws Exception{
		/*
		 * 1.新建RandomAccessFile 对象赋给raf
		 * 2.单字节循环读取,读取的字节值赋给b
		 * 		3.b异或key,结果在赋给b
		 * 		4.定位下标回到前一位置seek(raf.getFilePointer()-1)
		 * 		5.将字节值b 写回到的文件
		 * 6.关闭raf
<span style="white-space:pre">		</span> * 采用单字节访问比较慢,这里采用字节数组形式
		 */
		
		RandomAccessFile raf =new RandomAccessFile(f, "rw");
		//单字节访问
		/*int b ;
		while((b=raf.read())!=-1){
			b=b^key;
			raf.seek(raf.getFilePointer()-1);;
			raf.write(b);
		}*/
		//字节数组访问
		//1024 2048 4096 8192
		byte[] buff =new byte[8192];
		int n;//保存每一批的数量
		while((n=raf.read(buff))!=-1){
			for(int i=0;i<n;i++){
				buff[i] ^= key;
			}
			raf.seek(raf.getFilePointer()-n);
			raf.write(buff, 0, n);
		}
		
		raf.close();
	}
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章