用java给文件加密的简单实现
思路:文件加密,简单来说就是把文件读取出来,把读取出来的字节码数组进行遍历,把每一个码值和一个秘钥(随便一个数)进行异或运算,将运算后的结果全部写入到文件里。因为文件的码值全都做了改变,文件自然就无法打开了,这是加密过程。解密过程就是再执行一次,因为数字对另一个数进行两次异或运算等于数字本身。再异或一次码值就恢复原样了,文件自然也就可以恢复原样。
文件加密
import java.io.*;
import java.util.ArrayList;
import java.util.List;/*** 文件加密*/
public class FileEncrypt {public static void main(String[] args) throws IOException {// 需要加密/解密的文件路径String inputPath = "out.txt";// 加密/解密后的文件路径String outPath = "input.txt";// 用于存储文件字节码的集合数组List<Byte> byteList = new ArrayList<>();// 秘钥Byte key = 17;// 读取文件readFile(inputPath, byteList);// 加密/解密encryption(byteList, key);// 生成加密/解密后的文件writeText(byteList, outPath);}/*** 读取文件** @param inputPath 文件输入路径* @param byteList 文件的字节码列表* @throws IOException*/public static void readFile(String inputPath, List<Byte> byteList) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputPath));byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {for (int i = 0; i < len; i++) {byteList.add(bytes[i]);}}bis.close();}/*** 加密/解密** @param byteList* @param key*/public static void encryption(List<Byte> byteList, byte key) {for (int i = 0; i < byteList.size(); i++) {Byte aByte = byteList.get(i);// 把集合中的字节码与秘钥或运算Byte enNum = (byte) (aByte ^ key);// 把加密后的数替换原集合中的数byteList.set(i, enNum);}}/*** 生成加密/解密后的文件** @param byteList* @param outPath* @throws IOException*/public static void writeText(List<Byte> byteList, String outPath) throws IOException {BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outPath));byte[] tempByte = new byte[byteList.size()];for (int i = 0; i < byteList.size(); i++) {tempByte[i] = byteList.get(i);}bos.write(tempByte);bos.close();}
}
input.txt文件内容

将input的内容加密后,写入out.txt中

文件解密


总结
这就是对文件内容加密的简单实现,这里的文件可以换成图片或者其他类型的文件,都可以。另外,完全可以把inputPath和outPath,即文件输入和文件输出路径合成一个路径,这样就不会产生新文件了,运行一次文件加密,再运行一次,文件解密,非常方便。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
