java用异或进行文档的加密

5 篇文章 0 订阅
5 篇文章 0 订阅

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盘的小伙伴,文档路径可根据自己电脑进行修改。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值