admin管理员组

文章数量:1650776

1.思路:加密:将一个原始文档和一个密码进行异或操作,得到一个加密二进制文件。

解密:将加密的文件和用一个密码进行异或操作,得到原始文档。

2.代码:

import java.io.*;
import java.nio.charset.StandardCharsets;

public class FIle {
    private static final int numOfEncAndDec = 0x99; //加密解密秘钥
    private static int dataOfFile = 0; //文件字节内容

    public static void main(String[] args) {

        File f1 = new File("F:\\J\\f1.txt"); //初始文件
        File f = new File("F:\\J\\f.txt"); //加密文件
        File f2 = new File("F:\\J\\f2.txt"); //解密文件

        //创建文件
        try {
            System.out.println(f1.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            System.out.println(f.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            System.out.println(f2.createNewFile());
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {//对文件写入内容
            writeFile(f1,f2);
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {//加密操作
            EncFile(f1, f);
        } catch (Exception e) {
            e.printStackTrace();
        }

        try {//解密
            DecFile(f,f2);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private static void writeFile(File f1,File f2) throws Exception{
        if(!f1.exists()){
            System.out.println("文件不存在");
            return;
        }
        if(!f2.exists()){
            System.out.println("文件不存在");
            f2.createNewFile();
        }

        //IO流写入
        FileOutputStream fo1 = new FileOutputStream(f1);
        FileOutputStream fo2 = new FileOutputStream(f2);

        fo1.write("f1.txt的访问".getBytes(StandardCharsets.UTF_8));
        fo2.write("f2.txt对f1.txt加密文档的访问的访问\n".getBytes(StandardCharsets.UTF_8));
        fo1.flush();
        fo1.close();
        fo2.flush();
        fo2.close();
    }

    private static void EncFile(File f1, File f) throws Exception {

        if(!f1.exists()){//判断是否有此文件
            System.out.println("文件不存在");
            return;
        } 
        if(!f.exists()){
            System.out.println("文件不存在");
            f.createNewFile();
        }
        FileInputStream fis  = new FileInputStream(f1);
        FileOutputStream fos = new FileOutputStream(f);
        while ((dataOfFile = fis.read()) > -1) {
            fos.write(dataOfFile^numOfEncAndDec);//对文件进行加密,将文件和秘钥进行异或操作。
        }

        fis.close();
        fos.flush();
        fos.close();
    }

    private static void DecFile(File f, File f2) throws Exception {

        if(!f.exists()){
            System.out.println("文件不存在");
            return;
        }
        if(!f2.exists()){
            System.out.println("文件不存在");
            f2.createNewFile();
        }

        FileInputStream fis  = new FileInputStream(f);//读取加密文件
        FileOutputStream fos = new FileOutputStream(f2,true);//f2.txt文档可以添加文本

        while ((dataOfFile = fis.read()) > -1) {
            fos.write(dataOfFile^numOfEncAndDec);//再次进行异操作,提取文件,写入f2.txt.
        }
        //文档关闭
        fis.close();
        fos.flush();
        fos.close();
    }
}

4.结果到文档所在处进行查看,注:没F盘的小伙伴,文档路径可根据自己电脑进行修改。

小小代码奉上,希望有所帮助。

本文标签: 文档Java