Archive

一个安全的文件压缩和加密工具,使用 RSA 4096位 和 AES 256位 CBC 模式提供强加密保护的 tar.xz 压缩解决方案。
✨ 特性
- 🔒 强加密保护: 结合 RSA 4096位 和 AES 256位 CBC 模式加密
- 📦 高效压缩: 基于 tar.xz 格式,提供优秀的压缩比
- 🔑 密钥管理: 自动生成 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. 压缩文件
普通压缩
archive archive myfiles myfiles.tar.xz
加密压缩
archive archive -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 <公钥文件> - 使用指定公钥加密
-v - 显示处理文件路径
示例:
# 压缩目录
archive documents documents.tar.xz
# 加密压缩
archive -e public.pem -v sensitive_data encrypted_data.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
🔐 安全说明
加密机制
- 混合加密: 使用 RSA 加密 AES 密钥,AES 加密实际数据
- RSA 4096位: 提供强大的非对称加密保护
- AES 256位 CBC: 高效的对称加密,确保数据安全
- 随机密钥: 每次加密都生成新的 AES 密钥
最佳实践
- ✅ 定期备份私钥文件
- ✅ 将私钥存储在安全位置
- ✅ 使用强密码保护私钥文件
- ✅ 验证压缩包完整性
- ❌ 不要在不安全的渠道传输私钥
- ❌ 不要将私钥提交到版本控制系统
🏗️ 项目结构
archive/
├── main.go # 主程序入口
├── model/ # 压缩模型
│ ├── model.go # 核心接口定义
│ ├── parse.go # 版本解析
│ └── a1/ # A1 版本实现
├── utils/ # 工具函数
│ ├── tar.xz.go # tar.xz 处理
│ ├── encrypt.go # 加密工具
│ ├── aes/ # AES 加密
│ └── rsa/ # RSA 加密
└── bin/ # 编译输出
🤝 贡献
欢迎提交 Issue 和 Pull Request!
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature)
- 提交更改 (
git commit -m 'Add some AmazingFeature')
- 推送到分支 (
git push origin feature/AmazingFeature)
- 开启 Pull Request
🙏 致谢
如果这个项目对你有帮助,请给个 ⭐️ 支持一下!