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