簡單文件加密/解密

這個文件加密方法是採用異或方式對文中每個字節進行異或加密,邏輯非常簡單:



文件加密代碼實現:

</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();
	}
}



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