这个文件加密方法是采用异或方式对文中每个字节进行异或加密,逻辑非常简单:
文件加密代码实现:
</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();
}
}