Java中可用InputStream和OutputStream配合XOR算法实现轻量级文件加解密,加密与解密复用同一逻辑,通过循环密钥字节逐字节异或完成流式处理,适合学习或临时文件混淆,但不适用于高安全场景。

Java 中可以用 InputStream 和 OutputStream 配合简单的异或(XOR)算法,通过流式处理实现轻量级文件加密/解密。它不适用于高安全场景,但适合学习流操作、理解加解密基本流程,或对临时文件做简单混淆。
核心思路:用 XOR 实现可逆的字节流加密
XOR 是一种对称且自反的运算:对同一字节连续异或同一个密钥,两次操作会还原原始值(a ^ k ^ k == a)。因此,加密和解密可复用同一段流处理逻辑,只需确保密钥一致。
关键点:
- 逐字节读取原文件,与密钥字节(循环使用)异或后写入目标文件
- 不加载整个文件到内存,适合大文件
- 密钥可以是字符串,转为字节数组后循环参与运算
基础实现:带密钥的 FileInputStream → FileOutputStream 转换
以下是一个简洁、可直接运行的示例(JDK 8+):
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
import java.io.*;
import java.nio.file.*;
public class SimpleFileCipher {
public static void cipherFile(Path input, Path output, String key) throws IOException {
byte[] keyBytes = key.getBytes();
try (InputStream is = Files.newInputStream(input);
OutputStream os = Files.newOutputStream(output)) {
int b;
int keyIndex = 0;
while ((b = is.read()) != -1) {
byte encrypted = (byte) (b ^ keyBytes[keyIndex % keyBytes.length]);
os.write(encrypted);
keyIndex++;
}
}
}
// 使用示例
public static void main(String[] args) throws IOException {
Path src = Paths.get("report.txt");
Path enc = Paths.get("report.enc");
Path dec = Paths.get("report_dec.txt");
cipherFile(src, enc, "mySecretKey"); // 加密
cipherFile(enc, dec, "mySecretKey"); // 解密(同一密钥)
// dec 文件内容应与 src 完全一致
}
}
增强实用性:支持自动识别加解密方向
实际使用中,你可能希望一个方法自动判断“加密还是解密”——但 XOR 本身无法区分。更合理的方式是:明确调用 encrypt() 或 decrypt(),或通过文件扩展名约定(如 .enc 表示已加密)。也可加入简易头部校验(非强制):
- 加密时,在文件开头写入 4 字节魔数(如
0x454E4331,对应 "ENC1") - 解密前先读这 4 字节,匹配成功再继续;不匹配则报错或跳过校验
- 注意:这不提升安全性,仅防误操作
注意事项与局限性
这个方案是教学级实现,需注意:
- 不是真正的加密:XOR 密钥短、无扩散、无混淆,易被频率分析或已知明文攻击破解
- 密钥管理需自行负责:密钥硬编码或明文存储在代码/配置中存在风险
- 字符编码无关:操作的是原始字节,不关心文本编码,所以也适用于图片、PDF 等二进制文件
-
异常处理建议补全:生产环境应捕获
IOException并清理资源(本例已用 try-with-resources)
如果需要真正安全的加密,请用 Cipher 类配合 AES/GCM 模式,并正确处理 IV、密钥派生(PBKDF2)、完整性校验等。但对“用流实现简单加密器”这个目标,XOR 流式处理是最直观、最易掌握的起点。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










