Archive

一个安全的文件压缩和加密工具,使用 RSA 4096位 和 AES 256位 CBC 模式提供强加密保护的 tar.xz 压缩解决方案。
✨ 特性
- 🔒 强加密保护: 结合 RSA 4096位 和 AES 256位加密
- 📦 高效压缩: 基于 tar.xz 格式,提供优秀的压缩比
- ⚡ 双版本支持: A1 (稳定) 和 A2 (高性能并行) 可选
- 🔑 密钥管理: 自动生成 RSA 公私钥对
- ✅ 完整性校验: 内置压缩包完整性检查功能
- 🚀 简单易用: 直观的命令行界面
- 📊 进度显示: 可选的文件处理进度显示
🛠️ 安装
使用 go install
要求 Go 版本 >= 1.24
go install github.com/Rehtt/archive@latest
从源码构建
git clone https://github.com/Rehtt/archive.git
cd archive
go build -o archive
🚀 快速开始
1. 生成密钥对
archive gen
这将生成两个文件:
public.pem - 公钥(用于加密)
private.pem - 私钥(用于解密)
⚠️ 重要提醒: private.pem 必须妥善保管。如果丢失,加密的文件将无法解密!
2. 压缩文件
普通压缩 (默认使用 A2 版本)
archive archive myfiles myfiles.tar.xz
加密压缩 (默认使用 A2 版本)
archive archive -e public.pem myfiles myfiles.tar.xz
指定版本压缩
# 使用 A1 版本 (稳定、低内存)
archive archive -version A1 -e public.pem myfiles myfiles.tar.xz
# 使用 A2 版本 (高性能、并行)
archive archive -version A2 -e public.pem myfiles myfiles.tar.xz
3. 解压文件
普通解压
archive unarchive myfiles.tar.xz extracted/
解密解压
archive unarchive -e private.pem myfiles.tar.xz extracted/
4. 验证压缩包
# 验证普通压缩包
archive check myfiles.tar.xz
# 验证加密压缩包
archive check -e private.pem myfiles.tar.xz
📖 详细用法
命令概览
archive <subcommand> [options] [arguments]
子命令
archive - 压缩文件
archive [flags] <输入文件/目录> <输出文件>
选项:
-e <公钥文件> - 使用指定公钥加密
-version <版本> - 指定压缩版本 (A1 或 A2,默认 A2)
-v - 显示处理文件路径
示例:
# 使用默认 A2 版本压缩
archive archive documents documents.tar.xz
# 使用 A1 版本加密压缩 (稳定、低内存)
archive archive -version A1 -e public.pem sensitive_data encrypted_data.tar.xz
# 使用 A2 版本加密压缩 (高性能、并行)
archive archive -version A2 -e public.pem -v large_files high_perf.tar.xz
unarchive - 解压文件
unarchive [flags] <输入文件> <输出目录>
选项:
-e <私钥文件> - 使用指定私钥解密
-v - 显示处理文件路径
示例:
# 解压到指定目录
unarchive documents.tar.xz ./restored/
# 解密解压
unarchive -e private.pem -v encrypted_data.tar.xz ./decrypted/
gen - 生成密钥对
archive gen
生成 RSA 4096位 密钥对:
public.pem - 公钥
private.pem - 私钥
check - 验证压缩包
check [flags] <压缩包文件>
选项:
-e <私钥文件> - 验证加密压缩包时使用
-v - 显示详细信息
version - 显示版本
archive version
📊 版本对比与选择
Archive 提供两个版本,满足不同使用需求:
| 特性 |
A1 版本 (稳定) |
A2 版本 (高性能) |
| 加密模式 |
AES-CBC 256位 |
AES-GCM 256位 |
| 认证 |
无内置认证 |
AEAD 认证加密 |
| 并行性 |
串行处理 |
多核并行 |
| 块大小 |
512字节 |
64KB |
| 性能 |
稳定中等 |
高性能 (2-9x) |
| 内存使用 |
低 (~1-2MB) |
中等 (~4-8MB) |
| 适用场景 |
生产环境、兼容性 |
高性能、现代系统 |
| 稳定性 |
非常稳定 |
新版本 |
| 默认选择 |
|
✅ (默认) |
🎯 版本选择建议
选择 A1 版本:
archive archive -version A1 -e public.pem data/ output.tar.xz
- ✅ 生产环境,需要长期稳定性
- ✅ 资源受限的环境 (低内存/CPU)
- ✅ 对兼容性要求高
- ✅ 批量处理小文件
选择 A2 版本 (默认):
archive archive -e public.pem data/ output.tar.xz
# 或显式指定
archive archive -version A2 -e public.pem data/ output.tar.xz
- ✅ 高性能需求 (大文件处理)
- ✅ 多核 CPU 环境
- ✅ 需要数据完整性验证 (AEAD)
- ✅ 现代安全标准要求
🔐 安全说明
加密机制
- 混合加密: 使用 RSA 加密 AES 密钥,AES 加密实际数据
- RSA 4096位: 提供强大的非对称加密保护
- AES 256位:
- A1: CBC 模式 (经典可靠)
- A2: GCM 模式 (AEAD 认证加密)
- 随机密钥: 每次加密都生成新的 AES 密钥和初始化向量
最佳实践
- ✅ 定期备份私钥文件
- ✅ 将私钥存储在安全位置
- ✅ 使用强密码保护私钥文件
- ✅ 验证压缩包完整性
- ✅ 根据场景选择合适版本
- ❌ 不要在不安全的渠道传输私钥
- ❌ 不要将私钥提交到版本控制系统
🏗️ 项目结构
archive/
├── main.go # 主程序入口 (版本选择逻辑)
├── model/ # 压缩模型
│ ├── model.go # 核心接口定义
│ ├── parse.go # 版本解析
│ ├── a1/ # A1 版本 (AES-CBC 稳定版)
│ │ ├── README.md # A1 加密文件结构说明
│ │ ├── a1.go
│ │ ├── encrypt.go
│ │ └── decrypt.go
│ └── a2/ # A2 版本 (AES-GCM 并行版)
│ ├── README.md # A2 加密文件结构说明
│ ├── a2.go
│ ├── encrypt.go
│ └── decrypt.go
├── utils/ # 工具函数
│ ├── tar.xz.go # tar.xz 压缩处理
│ ├── encrypt.go # 通用加密工具
│ ├── aes/ # AES 加密 (CBC + GCM)
│ └── rsa/ # RSA 加密
└── bin/ # 编译输出
📦 加密文件格式
Archive 支持两种加密文件格式,均采用混合加密方案(RSA + AES):
A1 格式 - 稳定版
- 版本号: A1 (Protocol='A', Version=1)
- 加密模式: AES-256-CBC
- 块大小: 512 字节
- 处理方式: 串行加密/解密
- 适用场景: 生产环境、资源受限环境
- 详细说明: A1 文件结构文档
A2 格式 - 高性能版
- 版本号: A2 (Protocol='A', Version=2)
- 加密模式: AES-256-GCM (AEAD)
- 块大小: 64 KB
- 处理方式: 多核并行加密/解密
- 适用场景: 高性能需求、大文件处理
- 详细说明: A2 文件结构文档
文件格式通用结构
┌──────────────────────────────┐
│ 版本头 (2 字节) │ ← 'A' + 版本号
├──────────────────────────────┤
│ 文件头 (14 字节) │ ← 加密标志等
├──────────────────────────────┤
│ [可选] RSA 加密的配置 (512) │ ← AES 密钥等
├──────────────────────────────┤
│ [可选] AES 加密的数据块 │ ← 实际加密数据
├──────────────────────────────┤
│ tar.xz 压缩数据 │ ← 原始文件内容
└──────────────────────────────┘
查看详细文件结构:
💡 使用示例
基础场景
# 1. 生成密钥对
archive gen
# 2. 加密压缩文件夹 (使用默认 A2 版本)
archive archive -e public.pem ~/documents backup.tar.xz
# 3. 解密解压文件
archive unarchive -e private.pem backup.tar.xz ~/restored
# 4. 验证压缩包
archive check -e private.pem backup.tar.xz
高级场景
# 使用 A1 版本 (低内存环境)
archive archive -version A1 -e public.pem -v ~/data stable.tar.xz
# 使用 A2 版本进行大文件高性能压缩
archive archive -version A2 -e public.pem -v ~/large_dataset performance.tar.xz
# 普通压缩 (不加密)
archive archive ~/logs logs.tar.xz
# 显示详细处理过程
archive archive -v ~/source output.tar.xz
批量处理
# 批量压缩多个目录
for dir in dir1 dir2 dir3; do
archive archive -version A2 -e public.pem "$dir" "${dir}.tar.xz"
done
# 批量解压
for file in *.tar.xz; do
archive unarchive -e private.pem "$file" "./extracted/${file%.tar.xz}"
done
❓ 常见问题
Q: A1 和 A2 版本的文件可以互相解压吗?
A: 可以。Archive 会自动识别文件版本并使用相应的解压方式。您不需要指定版本来解压文件。
Q: 如何选择合适的版本?
A:
- 小文件 (<10MB): A1 和 A2 性能相当,建议用 A1
- 大文件 (>100MB): A2 版本性能显著更好
- 低内存环境: 使用 A1 版本
- 多核 CPU: 使用 A2 版本发挥性能优势
Q: 私钥丢失了怎么办?
A: 私钥丢失将无法解密文件,务必做好备份。建议:
- 将私钥备份到多个安全位置
- 使用加密的U盘或云存储备份
- 考虑使用密钥管理工具
Q: A2 版本的并行加密安全吗?
A: 完全安全。A2 使用 AES-GCM 模式,每个数据块使用唯一的 nonce,确保安全性。
🤝 贡献
欢迎提交 Issue 和 Pull Request!
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature)
- 提交更改 (
git commit -m 'Add some AmazingFeature')
- 推送到分支 (
git push origin feature/AmazingFeature)
- 开启 Pull Request
📖 详细文档
想了解更多技术细节和文件格式?查看以下详细文档:
📄 许可证
本项目采用 MIT License 开源协议。
🙏 致谢
📞 联系方式
如果这个项目对您有帮助,请给个 ⭐️ 支持一下!
🏠 返回顶部