# go_encrypt
**Repository Path**: ulquiola/go_encrypt
## Basic Information
- **Project Name**: go_encrypt
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-28
- **Last Updated**: 2025-12-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Go Encrypt - 文件加密解密工具
一个基于 AES-CTR 算法的文件加密/解密工具,支持批量加密整个目录结构。
## 功能特点
- ✅ 使用 AES-CTR 对称加密算法
- ✅ 支持批量加密/解密整个目录
- ✅ 自动保持目录结构
- ✅ 流式加密,支持大文件处理
- ✅ 每个文件使用独立的随机 IV(初始化向量)
- ✅ 可自定义源目录和目标目录
- ✅ 详细的日志输出
- ✅ 实时进度条显示(总体进度 + 单文件进度)
## 安装
确保已安装 Go 1.16 或更高版本。
```bash
# 克隆或下载本项目
cd go_encrypt
# 编译程序
go build -o go_encrypt go_encrypt.go
```
## 使用方法
### 基本用法
**加密文件(使用默认目录):**
```bash
go run go_encrypt.go -encrypt
```
这会将 `data/` 目录下的所有文件加密到 `encrypt/` 目录。
**解密文件(使用默认目录):**
```bash
go run go_encrypt.go -decrypt
```
这会将 `encrypt/` 目录下的所有文件解密到 `decrypt/` 目录。
### 自定义目录
**加密自定义目录:**
```bash
go run go_encrypt.go -encrypt -src "production_data" -dst "encrypted_prod"
```
**解密自定义目录:**
```bash
go run go_encrypt.go -decrypt -src "custom_encrypt" -dst "recovered_files"
```
### 使用编译后的程序
```bash
# 编译
go build -o go_encrypt go_encrypt.go
# 加密
./go_encrypt -encrypt
# 解密
./go_encrypt -decrypt
```
## 命令行参数
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `-encrypt` | 加密模式 | 无 |
| `-decrypt` | 解密模式 | 无 |
| `-src` | 源目录路径 | 加密时:`data`
解密时:`encrypt` |
| `-dst` | 目标目录路径 | 加密时:`encrypt`
解密时:`decrypt` |
## 目录结构
```
go_encrypt/
├── go_encrypt.go # 主程序
├── data/ # 原始文件存放目录(加密源)
├── encrypt/ # 加密后文件存放目录(加密目标/解密源)
├── decrypt/ # 解密后文件存放目录(解密目标)
├── LICENSE # 许可证
└── README.md # 说明文档
```
## 加密算法说明
本工具使用以下加密方案:
1. **算法**:AES-256(高级加密标准)
2. **模式**:CTR(计数器模式)
3. **密钥**:32 字节(256 位)
4. **IV(初始化向量)**:每个文件使用独立的随机 IV
5. **文件格式**:`[IV (16字节)][加密数据]`
### 默认密钥
程序内置了一个默认密钥,位于代码中的 `defaultKey` 常量。
⚠️ **安全提示**:在生产环境中,建议修改默认密钥或通过环境变量/配置文件传入自定义密钥。
## 工作流程
### 加密流程
1. 读取源目录中的所有文件
2. 为每个文件生成随机的 IV
3. 使用 AES-CTR 模式加密文件内容
4. 将 IV 写入加密文件头部
5. 保持原始目录结构
### 解密流程
1. 读取加密文件头部的 IV
2. 使用 AES-CTR 模式解密文件内容
3. 将解密后的数据写入目标文件
4. 保持原始目录结构
## 示例
### 示例 1:加密照片目录
```bash
# 将 data/photos 目录加密到 encrypt/photos
go run go_encrypt.go -encrypt -src "data/photos" -dst "encrypt/photos"
```
### 示例 2:解密文档
```bash
# 将 encrypt/docs 目录解密到 decrypt/docs
go run go_encrypt.go -decrypt -src "encrypt/docs" -dst "decrypt/docs"
```
### 示例 3:批量处理
```bash
# 加密整个 data 目录
go run go_encrypt.go -encrypt
# 查看加密结果
ls -R encrypt/
# 解密验证
go run go_encrypt.go -decrypt
# 对比原始文件和解密文件
diff -r data/ decrypt/
```
## 注意事项
1. **密钥安全**:默认密钥仅用于演示,生产环境请更换
2. **文件覆盖**:目标目录中已存在的文件会被覆盖
3. **内存使用**:采用流式处理,适合大文件
4. **错误处理**:单个文件失败不会中断整个流程
5. **目录要求**:源目录必须存在,目标目录会自动创建
## 日志输出
程序会输出详细的处理日志,包括:
- 正在处理的文件路径
- 文件总数统计
- 加密/解密进度(总体进度条)
- 单文件处理进度
- 成功/失败状态
- 错误信息(如有)
示例输出:
```
2024/12/28 10:30:00 开始加密 data → encrypt
2024/12/28 10:30:00 共发现 100 个文件需要加密
总体进度 100% |████████████████████| 100/100 [00:15<00:00, 6.5files/s]
加密: photo1.jpg 100% |████████████████████| 2.3M/2.3M [00:01<00:00, 2.1MB/s]
加密: photo2.jpg 100% |████████████████████| 3.5M/3.5M [00:01<00:00, 2.8MB/s]
...
2024/12/28 10:30:15
加密完成:目标目录 encrypt
```
### 进度条说明
程序提供两层进度显示:
1. **总体进度条**(显示在标准输出)
- 显示已处理的文件数量
- 预计剩余时间
- 处理速度(文件/秒)
2. **单文件进度条**(显示在标准错误输出)
- 显示当前文件名
- 文件大小进度
- 处理速度(字节/秒)
## 许可证
请参阅 `LICENSE` 文件了解详细信息。
## 贡献
欢迎提交 Issue 和 Pull Request!