一个基于 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/- 生成随机 salt 和 nonce prefix
- 使用 Argon2id 将用户提供的密码派生为 256 位密钥
- 写入 v3 文件头,记录 KDF/AEAD 参数和默认 8 MiB chunk size
- 按 chunk 流式读取输入,每个 chunk 使用独立 AES-256-GCM tag
- 每个 chunk 的 AAD 绑定文件头、chunk index、chunk 长度和 final 标记
- 默认保留原始文件;只有传入
--delete-source才会在成功后删除输入文件
CLI 使用 reader/writer 流式 API 处理文件,大文件不会再整文件读入内存。进度条会同时显示已完成文件数和已读取字节数,因此处理单个大文件时也会持续反馈吞吐速度和 ETA。默认写入路径会对临时输出文件和父目录执行同步;如果更看重吞吐量,可显式使用 --fast-write。
- 如果检测到 v3 文件头,按 chunk 流式验证并解密
- 如果没有 v3 文件头,按旧版格式提取前 12 字节作为
nonce - 使用对应的密钥派生方式生成密钥
- 使用 AES-256-GCM 验证并解密数据
- 默认保留
.enc文件;只有传入--delete-source才会在成功后删除输入文件
注意:v2 格式已从当前版本移除。遇到 RSDENC2\0 文件头时会返回不支持的格式错误;如仍有 v2 文件,请先使用较旧构建解密后再用当前版本重新加密。
aes-gcm: AES-GCM 加密实现argon2: Argon2id 密钥派生sha2: SHA-256 哈希算法clap: 命令行参数解析indicatif: 进度条显示rayon: 并行处理walkdir: 遍历目录
- 请务必记住你的密码,一旦丢失将无法恢复数据
- 默认不会删除原始文件;如使用
--delete-source,请确保已备份重要数据 - 本工具仅适用于文件加密,不适用于实时通信加密