Java IO--实现文件的加密解密
我们知道文件存储的方式在计算机当中是以字节的方式进行存储的,可以通过对文件字节的操作来实现文件的加密。
下面的例子是通过读取文件的字节,然后使字节中的每一位取反(1变0,0变1),再进行倒置,来实现加解密过程。
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
/**
* @author 朱俊伟
* @date 2020/11/15
*/
public class FileEncrytionTest
{
public static void main(String[] args)
{
//源文件
File file1 = new File("D:\\系统文件夹\\桌面\\test.txt");
//加密文件
File file2 = new File("D:\\系统文件夹\\桌面\\myenc.txt");
//解密文件
File file3 = new File("D:\\系统文件夹\\桌面\\mydec.txt");
//加密方法
EnFile(file1,file2);
//解密方法
DecFile(file2,file3);
}
//加密方法
public static void EnFile(File srcFile,File tarFile)
{
BufferedInputStream bis = null;
BufferedOutputStream bos = null ;
//源文件
File file1 = srcFile;
//加密文件
File file2 = tarFile;
try
{
InputStream is = new FileInputStream(file1);
OutputStream os = new FileOutputStream(file2);
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(os);
byte[] data = new byte[100];
int len = 0 ;
while((len = bis.read(data))!= -1)
{
byte[] temp = Arrays.copyOfRange(data,0,len);
System.out.println("加密读取:"+Arrays.toString(temp));
bos.write(reverseArray(temp));
System.out.println("加密写入:"+Arrays.toString(temp));
}
} catch ( Exception e)
{
e.printStackTrace();
} finally
{
try
{
if(bis != null)
{
/* 关闭管子 */
bis.close();
bis = null ;
}
}catch(IOException e)
{
e.printStackTrace();
}
try
{
if(bos != null)
{
/* 关闭管子 */
bos.close();
bos = null ;
}
}catch(IOException e)
{
e.printStackTrace();
}
}
}
//解密方法
public static void DecFile(File srcFile,File tarFile)
{
BufferedInputStream bis = null;
BufferedOutputStream bos = null ;
//源加密文件
File file1 = srcFile;
//解密文件
File file2 = tarFile;
try
{
InputStream is = new FileInputStream(file1);
OutputStream os = new FileOutputStream(file2);
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(os);
byte[] data = new byte[100];
int len = 0 ;
while((len = bis.read(data))!= -1)
{
byte[] temp = Arrays.copyOfRange(data,0,len);
System.out.println("解密读取:"+Arrays.toString(temp));
bos.write(reverseArray(temp));
System.out.println("解密写入:"+Arrays.toString(temp));
}
} catch ( Exception e)
{
e.printStackTrace();
} finally
{
try
{
if(bis != null)
{
/* 关闭管子 */
bis.close();
bis = null ;
}
}catch(IOException e)
{
e.printStackTrace();
}
try
{
if(bos != null)
{
/* 关闭管子 */
bos.close();
bos = null ;
}
}catch(IOException e)
{
e.printStackTrace();
}
}
}
/**
* 字节数组的各位取反,并倒置
* @param bytes
* @return
*/
public static byte[] reverseArray(byte[] bytes){
for (int i=0; i<bytes.length/2; i++){
byte b = (byte) ~bytes[i];
bytes[i] = (byte) ~bytes[bytes.length-i-1];
bytes[bytes.length-i-1] = b;
}
return bytes;
}
}
控制台打印

三个文件对比。

Java IO--实现文件的加密解密的更多相关文章
- C# 加密(Encrypt) 解密(Decrypt) 操作类 java与 C# 可以相互加密解密
public sealed class EncryptUtils { #region Base64加密解密 /// <summary> /// Base64加密 /// </summ ...
- Java IO :文件
在java应用程序中,文件是一种常用的数据源或者存储数据的媒介.所以这一小节将会对Java中文件的使用做一个简短的概述.这里只提供一些必要的知识点. 通过Java IO读文件 如果你需要在不同端之间读 ...
- java io读写文件
java io读写文件相关阅读:http://www.cnblogs.com/wing011203/archive/2013/05/03/3056535.html public class DemoI ...
- java(IO)读写文件乱码转换UTF-8问题
java(IO)读写文件乱码转换UTF-8问题 读取文件 String Content = ""; // 文件很长的话建议使用StringBuffer try { FileInpu ...
- java DES转C#DES加密解密
一个程序用到java的cn.core.jar加密的,需要在.NET 中解密,发现JAVA的des算法与C#的有点区别. 自己不太懂加密解密算法,所以找了个省事的方法,用IKVM.NET,用这个将cn. ...
- DES加密 java与.net可以相互加密解密两种方法
DES加密 java与.net可以相互加密解密两种方法 https://www.cnblogs.com/DrWang/archive/2011/03/30/2000124.html sun.misc. ...
- Java IO 流-- 文件拷贝
IO流操作套路: 1.创建源: 2.选择流: 3.操作: 4.释放资源 上代码: package com.xzlf.io; import java.io.File; import java.io.Fi ...
- java对压缩文件进行加密,winrar和好压 直接输入解密密码来使用
<!-- https://mvnrepository.com/artifact/net.lingala.zip4j/zip4j --> <dependency> <gro ...
- java使用RSA与AES加密解密
首先了解下,什么是堆成加密,什么是非对称加密? 对称加密:加密与解密的密钥是相同的,加解密速度很快,比如AES 非对称加密:加密与解密的秘钥是不同的,速度较慢,比如RSA 先看代码(先会用在研究) 相 ...
- 【推荐】JAVA基础◆浅谈3DES加密解密
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
随机推荐
- Flink客户端操作
一.mysql数据准备 mysql -hip -uroot -p密码 CREATE DATABASE flink; USE flink; CREATE TABLE user ( id INTEGER ...
- Leetcode 765 情侣牵手 / Hetao-013 翅膀打结 题解 [ 黄 ] [ 并查集 ] [ BFS ] [ 贪心 ]
经典的连通块题,幸好我之前在 leetcode 看过原. 转化 首先观察到一对cp无论是男在前,还是女在前,都视为配对成功,对答案无影响. 因此,我们可以把一对情侣赋同一个编号,直接加一除以二即可. ...
- 利用JS 代码块 为你的 Typecho博客添加一个 Copy 按钮
引入 JS 将以下代码添加到主题 header.php 中的 </head> 标签前,本主题也可以前往 控制台 - 设置外观 - 主题自定义扩展,将它添加到 自定义 HTML 元素拓展 - ...
- 批量上传序列到Gisaid数据库
本文演示的是用Gisaid官网自带的Excel宏批量上传毒株信息和序列到Gisaid数据库,需要魔法. 1. 下载GISAID Batch Uploader 找到自己需要上传的病毒类型,我是Flu,在 ...
- FastAPI 路径参数完全指南:从基础到高级校验实战 🚀
title: FastAPI 路径参数完全指南:从基础到高级校验实战 date: 2025/3/5 updated: 2025/3/5 author: cmdragon excerpt: 探讨 Fas ...
- Ollama+DeepSeek+SlackBot
技术背景 想必最近有在部署DeepSeek大模型的人,看标题就知道这篇文章在做什么事情了.由于Ollama对于IP的监听缺乏安全防护,并且内网部署的Ollama模型对于外网来说也是不可见的,而如果使用 ...
- 关于我第二周学习kotlin这门语言
有关kotlin的知识点: 在学习lambda之前,我们先了解一下什么是lambda,简答来说就是一小段代码块,并且我们可以将这个代码块在函数之间传递,这是函数式编程的一个重要特性. 通常我们会需要一 ...
- Manjora配置记录
22/9/12 目前的启动项有3:Windows Boot Manager.Manjaro.UEFI OS.其中UEFI OS 和 Manjaro 进入后内容相同:Windows下检测不到Manjar ...
- 理解Python中的元类(metaclass)
类也是对象 在理解元类之前,你需要先掌握Python中的类.Python中类的概念借鉴于Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Pytho ...
- JOKER 低代码平台 20250313 重磅更新:全方位升级,解锁开发新体验
JOKER 低代码平台于 2025 年 3 月 13 日迎来了一次全面且深度的升级.本次更新聚焦前端交互.服务端功能以及通用操作等多个关键领域,致力于打造更卓越的开发环境,为开发者们带来更加高效.稳定 ...