archive

command module
v1.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 11, 2025 License: MIT Imports: 9 Imported by: 0

README

Archive

Go Version License Go Report Card

一个安全的文件压缩和加密工具,使用 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)
  • ✅ 现代安全标准要求

🔐 安全说明

加密机制
  1. 混合加密: 使用 RSA 加密 AES 密钥,AES 加密实际数据
  2. RSA 4096位: 提供强大的非对称加密保护
  3. AES 256位:
    • A1: CBC 模式 (经典可靠)
    • A2: GCM 模式 (AEAD 认证加密)
  4. 随机密钥: 每次加密都生成新的 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!

  1. Fork 本项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

📖 详细文档

想了解更多技术细节和文件格式?查看以下详细文档:

📄 许可证

本项目采用 MIT License 开源协议。

🙏 致谢

📞 联系方式


如果这个项目对您有帮助,请给个 ⭐️ 支持一下!

🏠 返回顶部

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
a1
a2
aes
rsa

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL