hbsx 0.2.7

A easy-to-use file encryption tool with compression support
Documentation
# XOR 文件处理工具

## 安装方式

### 通过 npm 安装(推荐)

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

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

支持的平台:
- Windows (x64, ARM64)
- Linux (x64, ARM64)
- macOS (Intel, Apple Silicon)

### 从源码编译

```bash
# 克隆仓库
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. **处理状态标识**:
   - `✅ 新增:` - 首次处理的文件
   - `🔄 更新:` - 重新处理的已存在文件
   - 未显示 - 跳过的未变化文件

## 使用方法

### 基本用法

```bash
# 使用默认参数
cargo run

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

### 示例

```bash
# 处理 ./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 命令行工具查询数据库:

```bash
# 查看所有文件记录
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