原理:利用异或的特性,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(); } }代码操作及结果演示:
首先,我们现在桌面上任意创建一个txt文件作为试验 文档内容如下:
ABCDEFGHIJKLMN这是一个测试文档
然后运行源代码进行加密,输入加密的文档的绝对路径,选择加密
接下来,便可以在输入的路径下看到新建的文件,打开后内容如下
"! '&%$+*)(/.-嬡鷧囒銍凵呏鑻迢咍鋮吕
然后运行源代码进行解密,输入待解密的文档的绝对路径,选择解密
接下来,便可以在输入的路径下看到新建的文件,打开后内容如下
ABCDEFGHIJKLMN这是一个测试文档