這個文件加密方法是採用異或方式對文中每個字節進行異或加密,邏輯非常簡單:
文件加密代碼實現:
</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();
}
}