hbsx

Crates.iohbsx
lib.rshbsx
version0.2.9
created_at2025-12-10 09:41:58.737421+00
updated_at2025-12-11 03:09:12.520707+00
descriptionA easy-to-use file encryption tool with compression support
homepagehttps://github.com/jihuayu/xor
repositoryhttps://github.com/jihuayu/xor
max_upload_size
id1977751
size178,579
纪华裕 (jihuayu)

documentation

README

XOR 文件处理工具

安装方式

通过 npm 安装(推荐)

# 全局安装
npm install -g @jihuayu/hbsx

# 使用 npx(无需安装)
npx @jihuayu/hbsx [options]

支持的平台:

  • Windows (x64, ARM64)
  • Linux (x64, ARM64)
  • macOS (Intel, Apple Silicon)

从源码编译

# 克隆仓库
git clone https://github.com/jihuayu/xor.git
cd xor

# 编译
cargo build --release

# 运行
./target/release/xor

功能特性

  • 🔐 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: 时间戳

增量处理逻辑

程序会智能检测文件变化:

  1. 检查修改时间:

    • 如果修改时间未变化 → 跳过处理
    • 如果修改时间变化 → 进入下一步
  2. 检查文件哈希:

    • 如果哈希未变化 → 跳过处理(仅修改时间变化,如 touch 命令)
    • 如果哈希变化 → 重新处理文件
  3. 处理状态标识:

    • ✅ 新增: - 首次处理的文件
    • 🔄 更新: - 重新处理的已存在文件
    • 未显示 - 跳过的未变化文件

使用方法

基本用法

# 使用默认参数
cargo run

# 指定输入目录、输出目录和密码
cargo run -- <输入目录> <输出目录> <密码>

示例

# 处理 ./input 目录下的文件,输出到 ./output
cargo run

# 处理指定目录
cargo run -- /path/to/input /path/to/output mypassword

# Release 模式(更快)
cargo build --release
./target/release/xor /path/to/input /path/to/output mypassword

输出说明

控制台输出

程序运行时会显示:

📁 输入目录: ./input
📁 输出目录: ./output
🔐 密码已设置
💾 数据库位置: C:\Users\username\.xor\data.db
🚀 使用 Rayon 多线程 + Zstd 多线程压缩 + SIMD 加速哈希

📊 找到 10 个文件

✅ 新增: file1.txt
✅ 新增: file2.jpg
🔄 更新: file3.pdf

📋 清单已生成: ./output/manifest.csv
🎉 所有文件处理完成!共 3 个文件

文件输出

  1. 加密文件:

    • 保存在输出目录,扩展名为 .zstd.enc
    • 保持原有目录结构
  2. CSV 清单:

    • manifest.csv 文件记录所有处理的文件信息
    • 包含文件路径、修改时间、原始哈希、输出哈希
  3. 数据库文件:

    • ~/.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: 用户目录获取

注意事项

  1. 首次运行时会自动创建 ~/.xor 目录和数据库文件
  2. 数据库会持久化保存所有文件的处理记录
  3. 重复运行程序只会处理新增或变化的文件
  4. 日志记录会持续累积,可通过数据库查询历史日志
  5. 密码需要妥善保管,丢失后无法解密文件

查询数据库

可以使用 SQLite 命令行工具查询数据库:

# 查看所有文件记录
sqlite3 ~/.xor/data.db "SELECT * FROM files;"

# 查看最近的日志
sqlite3 ~/.xor/data.db "SELECT * FROM logs ORDER BY timestamp DESC LIMIT 10;"

# 查看处理失败的文件
sqlite3 ~/.xor/data.db "SELECT * FROM logs WHERE status = 'failed' OR status = 'error';"

# 统计处理的文件数量
sqlite3 ~/.xor/data.db "SELECT COUNT(*) FROM files;"

License

MIT

Commit count: 0

cargo fmt