XOR 文件处理工具
安装方式
通过 npm 安装(推荐)
# 全局安装
# 使用 npx(无需安装)
支持的平台:
- Windows (x64, ARM64)
- Linux (x64, ARM64)
- macOS (Intel, Apple Silicon)
从源码编译
# 克隆仓库
# 编译
# 运行
功能特性
- 🔐 AES-256-GCM 加密: 使用 PBKDF2-HMAC-SHA256 从密码派生密钥
- 🗜️ Zstd 多线程压缩: 高效的压缩算法,支持多线程加速
- ⚡ 并行处理: 使用 Rayon 多线程并行处理文件
- 🚀 SIMD 加速: SHA256 哈希计算自动使用 CPU 硬件加速
- 💾 SQLite 数据库: 文件信息和处理日志持久化存储
- 🔄 增量处理: 智能检测文件变化,只处理有变化的文件
- 📝 日志记录: 完整的处理日志存储在数据库中
数据库功能
数据库位置
数据库文件自动存储在用户主目录:
- Windows:
C:\Users\<用户名>\.xor\data.db - Linux/Mac:
~/.xor/data.db
数据库结构
files 表
存储文件处理记录:
id: 主键relative_path: 文件相对路径(唯一)modified_time: 文件修改时间original_hash: 原始文件 SHA256 哈希output_hash: 输出文件 SHA256 哈希created_at: 首次处理时间updated_at: 最后更新时间
logs 表
存储处理日志:
id: 主键file_path: 文件路径action: 操作类型(check, process)status: 状态(new, changed, skip, success, failed, error)message: 日志消息timestamp: 时间戳
增量处理逻辑
程序会智能检测文件变化:
-
检查修改时间:
- 如果修改时间未变化 → 跳过处理
- 如果修改时间变化 → 进入下一步
-
检查文件哈希:
- 如果哈希未变化 → 跳过处理(仅修改时间变化,如 touch 命令)
- 如果哈希变化 → 重新处理文件
-
处理状态标识:
✅ 新增:- 首次处理的文件🔄 更新:- 重新处理的已存在文件- 未显示 - 跳过的未变化文件
使用方法
基本用法
# 使用默认参数
# 指定输入目录、输出目录和密码
示例
# 处理 ./input 目录下的文件,输出到 ./output
# 处理指定目录
# Release 模式(更快)
输出说明
控制台输出
程序运行时会显示:
📁 输入目录: ./input
📁 输出目录: ./output
🔐 密码已设置
💾 数据库位置: C:\Users\username\.xor\data.db
🚀 使用 Rayon 多线程 + Zstd 多线程压缩 + SIMD 加速哈希
📊 找到 10 个文件
✅ 新增: file1.txt
✅ 新增: file2.jpg
🔄 更新: file3.pdf
📋 清单已生成: ./output/manifest.csv
🎉 所有文件处理完成!共 3 个文件
文件输出
-
加密文件:
- 保存在输出目录,扩展名为
.zstd.enc - 保持原有目录结构
- 保存在输出目录,扩展名为
-
CSV 清单:
manifest.csv文件记录所有处理的文件信息- 包含文件路径、修改时间、原始哈希、输出哈希
-
数据库文件:
~/.xor/data.db存储完整的文件记录和处理日志
性能优化
- 多线程压缩: Zstd 内部使用 4 个线程
- 并行文件处理: 使用 Rayon 自动并行处理多个文件
- SIMD 加速: SHA256 哈希计算自动使用 CPU 硬件加速指令
- Release 编译优化:
opt-level = 3: 最高优化级别lto = true: 链接时优化codegen-units = 1: 单一代码生成单元,更好的优化
文件格式
输出文件采用自定义容器格式:
[MAGIC: 4字节 "ZENC"]
[VERSION: 1字节]
[SALT_LEN: 1字节]
[SALT: 16字节]
[NONCE_LEN: 1字节]
[NONCE: 12字节]
[CIPHERTEXT: 变长]
依赖项
walkdir: 递归遍历目录zstd: Zstandard 压缩算法(多线程支持)aes-gcm: AES-256-GCM 加密rand: 随机数生成pbkdf2: PBKDF2 密钥派生sha2: SHA256 哈希(SIMD 加速)anyhow: 错误处理csv: CSV 文件生成chrono: 时间处理rayon: 并行处理rusqlite: SQLite 数据库dirs: 用户目录获取
注意事项
- 首次运行时会自动创建
~/.xor目录和数据库文件 - 数据库会持久化保存所有文件的处理记录
- 重复运行程序只会处理新增或变化的文件
- 日志记录会持续累积,可通过数据库查询历史日志
- 密码需要妥善保管,丢失后无法解密文件
查询数据库
可以使用 SQLite 命令行工具查询数据库:
# 查看所有文件记录
# 查看最近的日志
# 查看处理失败的文件
# 统计处理的文件数量
License
MIT