Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

data-enc

一个基于 Rust 开发的命令行文件加密/解密工具,支持对单个文件或整个目录进行 AES-256-GCM 加密。

功能特性

  • 使用 Argon2id 从密码派生 AES-256-GCM 密钥
  • 新加密文件使用 v3 chunked 流式格式
  • 解密时兼容旧版 nonce || ciphertext+tag 格式;v2 格式已移除
  • 支持批量处理文件和目录
  • 并行处理多个文件以提高性能
  • 显示文件数和字节级进度条,包含吞吐速度和 ETA
  • 默认保留输入文件,可通过 --delete-source 在成功后删除输入文件
  • 可通过 --fast-write 跳过强制落盘同步,提高大量小文件处理速度

安装

确保你已经安装了 Rust 和 Cargo。然后克隆项目并构建,随后找到目标可执行文件:

git clone <repository-url>
cd data-enc-src 
cargo build --release

使用方法

加密文件或目录

./data-enc --mode enc --passwd <your_password> <file_or_directory_path>

解密文件或目录

./data-enc --mode dec --passwd <your_password> <encrypted_file_or_directory_path>

参数说明

  • --mode-m: 操作模式,enc 表示加密,dec 表示解密
  • --passwd-p: 用于加密/解密的密码
  • --delete-source: 成功后删除输入文件,默认关闭
  • --jobs <N>: 限制并行处理的线程数,默认最多 4 个
  • --fast-write: 输出文件仍使用临时文件加 rename,但跳过 fsync,速度更快,异常断电时持久性保证较弱
  • <file_or_directory_path>: 要处理的文件或目录路径

示例

加密单个文件

./data-enc --mode enc --passwd mysecretpassword ./photo.jpg

加密整个目录

./data-enc --mode enc --passwd mysecretpassword ./photos/

解密单个文件

./data-enc --mode dec --passwd mysecretpassword ./photo.jpg.enc

解密整个目录

./data-enc --mode dec --passwd mysecretpassword ./photos/

技术细节

加密流程

  1. 生成随机 salt 和 nonce prefix
  2. 使用 Argon2id 将用户提供的密码派生为 256 位密钥
  3. 写入 v3 文件头,记录 KDF/AEAD 参数和默认 8 MiB chunk size
  4. 按 chunk 流式读取输入,每个 chunk 使用独立 AES-256-GCM tag
  5. 每个 chunk 的 AAD 绑定文件头、chunk index、chunk 长度和 final 标记
  6. 默认保留原始文件;只有传入 --delete-source 才会在成功后删除输入文件

CLI 使用 reader/writer 流式 API 处理文件,大文件不会再整文件读入内存。进度条会同时显示已完成文件数和已读取字节数,因此处理单个大文件时也会持续反馈吞吐速度和 ETA。默认写入路径会对临时输出文件和父目录执行同步;如果更看重吞吐量,可显式使用 --fast-write

解密流程

  1. 如果检测到 v3 文件头,按 chunk 流式验证并解密
  2. 如果没有 v3 文件头,按旧版格式提取前 12 字节作为 nonce
  3. 使用对应的密钥派生方式生成密钥
  4. 使用 AES-256-GCM 验证并解密数据
  5. 默认保留 .enc 文件;只有传入 --delete-source 才会在成功后删除输入文件

注意:v2 格式已从当前版本移除。遇到 RSDENC2\0 文件头时会返回不支持的格式错误;如仍有 v2 文件,请先使用较旧构建解密后再用当前版本重新加密。

依赖库

  • aes-gcm: AES-GCM 加密实现
  • argon2: Argon2id 密钥派生
  • sha2: SHA-256 哈希算法
  • clap: 命令行参数解析
  • indicatif: 进度条显示
  • rayon: 并行处理
  • walkdir: 遍历目录

注意事项

  1. 请务必记住你的密码,一旦丢失将无法恢复数据
  2. 默认不会删除原始文件;如使用 --delete-source,请确保已备份重要数据
  3. 本工具仅适用于文件加密,不适用于实时通信加密

About

一个基于 Rust 开发的命令行文件加密/解密工具,支持对单个文件或整个目录进行 AES-256-GCM 加密,并可自动删除原始文件。

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages