# 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!