java实现文件超简易加解密操作

原理:利用异或的特性,a == a ^b ^b ,即同一数据对同一个数经过两次异或后仍是原数据

适用性:不单单适用于txt文件,还可适用于其他uncoide编码类型的文件,支持中文加密

核心代码前瞻:

while (true){
            int data = fileInputStream.read();
            if(data == -1){
                //数据读完
                break;
            }
            //加解密。同一数据经过对同一数字异或后还是原数据
            fileOutputStream.write(data^99);
        }

效果图前瞻:
在这里插入图片描述

完整源代码:

import java.io.*;
import java.util.Scanner;
//使用异或实现文件的简易加密或解密,同一数据异或一个数字两次,还是原数据
public class Test {
    static String s ;
    public static void main(String[] args) throws IOException {
        //输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入执行操作的文件绝对路径:");
        String fileName = scanner.nextLine();
        System.out.println("请输入执行的操作,1-加密,2-解密");
        int menu = scanner.nextInt();
        //源文件
        File oldFile = new File(fileName);
        //文件输入流,读取该文件内部数据
        FileInputStream fileInputStream = new FileInputStream(oldFile);
        //功能输出信息
        switch (menu){
            case 1 :
                //加密
                s = "-加密";
                System.out.println("加密完成");
                break;
            case 2 :
                //解密
                s = "-解密";
                System.out.println("解密完成");
                break;
        }
        //新文件
        File newFile = new File(oldFile.getParent(),oldFile.getName()+s);
        //文件输出流,输出加密后的数据到一个新建文件中
        FileOutputStream fileOutputStream = new FileOutputStream(newFile);

        //***核心***,加解密操作
        while (true){
            int data = fileInputStream.read();
            if(data == -1){
                //数据读完
                break;
            }
            //加解密。同一数据经过对同一数字异或后还是原数据
            fileOutputStream.write(data^99);
        }
        //关闭输入输出流
        fileInputStream.close();
        fileOutputStream.close();
    }
}

代码操作及结果演示:

  1. 首先,我们现在桌面上任意创建一个txt文件作为试验
    文档内容如下:

    ABCDEFGHIJKLMN这是一个测试文档

  2. 然后运行源代码进行加密,输入加密的文档的绝对路径,选择加密
    在这里插入图片描述

  3. 接下来,便可以在输入的路径下看到新建的文件,打开后内容如下

    "! '&%$+*)(/.-嬡鷧囒銍凵呏鑻迢咍鋮吕

  4. 然后运行源代码进行解密,输入待解密的文档的绝对路径,选择解密
    在这里插入图片描述

  5. 接下来,便可以在输入的路径下看到新建的文件,打开后内容如下

    ABCDEFGHIJKLMN这是一个测试文档

/**
2021.9.26日补充
**/
对字符串进行加解密,scala语言版

/**
   * 异或加解密,原理:a == a ^b ^,即同一数据对同一个数经过两次异或后仍是原数据
   * 加解密都调用此方法
   * @param string
   * @return
   */
  def xorEncodeAndDecode(input: String):String = {
    //异或加解密key值
    val key:Int = 10
    val output:StringBuilder = new StringBuilder()
    input.foreach(x => {
      output.append(x ^ key.toChar)
    })
    output.toString()
  }

版权声明:本文为qq_41677788原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。