对目录下的所有文件进行加密

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

public class JiaMiDirAll {
    public static void main(String[] args) {
        System.out.println("输入文件夹");
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        File dir=new File(s);
        if(! dir.isDirectory()) {
            System.out.println("不是文件夹");
            System.exit(0);
        }
        System.out.println("请输入密钥:");
        int key=sc.nextInt();
        try {
            encryptDir(dir,key);
            System.out.println("完成");
        } catch (IOException e) {
            e.printStackTrace();
        }
        sc.close();
    }

    private static void encryptDir(File dir, int key) throws IOException {
              //  对目录列表,列不出来直接结束
        File[] files=dir.listFiles();
        if(files==null)return;
        for(File f:files)
        {
            if(f.isFile())
            {
                encrypt(f, key);
            }
            else{
                encryptDir(dir, key);
            }
        }
    }
    private static void encrypt(
            File file, int key) throws IOException  {
        /*
         * 从文件读取一个字节值,
         * 对key异或后,再写回到文件
         */
        RandomAccessFile raf = 
         new RandomAccessFile(file, "rw");
        byte[] buff = new byte[8192];
        int n;//保存每一批的数量
        while((n = raf.read(buff)) != -1) {
            //对数组前n个字节值加密
            for(int i=0;i<n;i++) {
                buff[i] ^= key;
            }
            //下标前移n个位置
            raf.seek(raf.getFilePointer()-n);          
            //数组中前n个字节,一批写回文件
            raf.write(buff,0,n);
        }
        raf.close();
    }
}

运行结果1

输入文件夹
D:\ready
请输入密钥:
250
完成

ready文件夹下的文件被加密,无法正常打开
运行结果2

输入文件夹
D:\ready
请输入密钥:
250
完成

ready文件夹下的文件全部解密,被正常打开

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容