如何完成对加密后文件的解密操作
- 我们上面是使用了给读入的数据进行一个^5运算之后然后写出的方式对文件进行了加密操作,这个时候如果我们要使用加密后文件的解密, 这个时候我们就要给加密后的文件的数据再进行一个^5的运算 ,然后再将数据写出,然后就完成了解密
这里我们来理一理流程:
- 首先是加密
- 读入一个未加密文件
- 对读入文件数据进行^5 (也就是进行加密)
- 然后写出数据
- 然后是解密
-
读入一个加密后的文件
-
对读入的文件数据进行^5(也就是进行解密)
-
为什么这个时候对加密后文件数据进行^5又是进行了解密?
因为我们之前在只使用两个变量完成变量数据内容交换时学过,如果一个x异或y之后再异或一个y就是x,如果一个x异或y之后再异或一个x就是y,这个时候我们给原本的数据进行一次异或5之后就是进行了加密,然后再进行一次^5之后就是完成了解码
-
-
然后写出数据
这里我们给出加密程序:
- 这里我们对文件的加密的思想就是对文件中每个字节的数据进行编码之后^(异或)5,然后就完成了对文件的一个简单加密
package IO流.fileinputstream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo6 {
public static void main(String[] args) throws IOException{
/*
创建结点流对象 ,指明源文件和加密后文件的存储地址
*/
FileInputStream fis = new FileInputStream("abc.png");
FileOutputStream fos = new FileOutputStream("abcSecret.png");
/*
创建一个缓冲byte[]
*/
byte [] bytes = new byte[20];
/*
创建一个临时变量用来接收read()方法的返回值
*/
int len = 0;
/*
数据的读入和写出操作,每次读入数据之后,写出数据之前,我们要将数据编码进行一个^5,进行数据加密
*/
while((len = fis.read(bytes)) != -1){
for (int i = 0; i < len ; i++){
bytes[i] = (byte)(bytes[8] ^ 5);
}
fos.write(bytes,0,len);
}
/*
流资源的关闭
*/
fos.close();
fis.close();
}
}
- 上面的abc.png是一个本项目之下的图片
- 这个时候我们运行这个程序之后就会在本项目之下产生一个加密后的文件,这个文件名为abcSecret.png的加密文件
- 这个加密文件和我们的原文件的大小是完全相同的,但是我们的加密文件是不可以打开的
这里我们给出解密的程序:
package IO流.fileinputstream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo7 {
public static void main(String[] args) throws IOException{
/*
创建结点流对象 ,指明源文件和加密后文件的存储地址
*/
FileInputStream fis = new FileInputStream("abcSecret.png");
FileOutputStream fos = new FileOutputStream("abc5.png");
/*
创建一个缓冲byte[]
*/
byte [] bytes = new byte[20];
/*
创建一个临时变量用来接收read()方法的返回值
*/
int len = 0;
/*
数据的读入和写出操作,每次读入数据之后,写出数据之前,我们要将数据编码进行一个^5,进行数据加密
*/
while((len = fis.read(bytes)) != -1){
for (int i = 0; i < len ; i++){
bytes[i] = (byte)(bytes[i] ^ 5);
}
fos.write(bytes,0,len);
}
/*
流资源的关闭
*/
fos.close();
fis.close();
}
}
- 这个时候我们运行一次程序之后将我们的加密后的文件作为输入,然后得到一个输出文件,这个时候我们就可以发现这个输出文件是正常文件