ConfigCrypt 是一个基于 Fernet (对称加密) 和 PBKDF2 (密钥派生) 的文件加密工具。它可以帮助您安全地加密配置文件、密钥、凭证等敏感数据,并提供直观的图形界面和强大的命令行工具。
- 🔒 安全可靠 - 使用行业标准的加密算法(Fernet + PBKDF2-HMAC-SHA256)
- 🎨 界面美观 - 黑底暗金色高级UI设计
- 🖥️ 跨平台 - 完美支持 Windows、macOS、Linux
- 🔑 Keychain集成 - 主密码安全存储在系统密钥链
- 📦 多种接口 - CLI命令行、GUI图形界面、Python Library API
- 📄 格式支持 - 原生支持 JSON、YAML、ENV 格式解析
- 🚀 零配置 - 开箱即用,无需复杂设置
- 文件加密/解密 - 支持任意文件类型加密
- 主密码管理 - 基于系统Keychain的安全密码存储
- 格式解析 - 解密后自动解析 JSON/YAML/ENV 格式
- 操作历史 - 记录所有加密/解密操作
- 文件拖拽 - GUI支持拖拽文件加密
- 编辑器集成 - 解密后直接打开编辑器
- 黑底暗金色配色 - 低调奢华的视觉体验
- 上下分割布局 - 拖拽区 + 操作历史
- 智能文件识别 - 自动识别 .enc 加密文件
- 实时反馈 - 密码强度、操作进度实时显示
pip install configcryptcc init# 加密文件(会删除原文件)
cc encrypt config.json
# 保留原文件
cc encrypt config.json --keep
# 指定输出路径
cc encrypt config.json --out encrypted_config.enc# 解密文件
cc decrypt config.json.enc
# 解密并打开编辑器
cc decrypt config.json.enc --open
# 指定编辑器
cc decrypt config.json.enc --open --editor notepad# 启动图形界面(推荐方式)
python run.py
# 或者双击 Windows 启动文件
🔐 启动ConfigCrypt.batpip install configcrypt# 克隆仓库
git clone https://github.com/transcentlin/configcrypt.git
cd configcrypt
# 安装依赖
pip install -e .- Python: 3.8 或更高版本
- 操作系统: Windows 10+, macOS 10.14+, Linux (主流发行版)
cryptography- 加密引擎keyring- 系统Keychain集成click- CLI命令行框架PySide6- GUI图形界面pyyaml- YAML格式支持python-dotenv- ENV格式支持
cc init首次使用时需要设置主密码。密码要求:
- 至少8个字符
- 支持任意字符组合
- 系统会显示密码强度(弱/中/强)
# 基本用法
cc encrypt <文件路径>
# 常用选项
cc encrypt config.json # 加密文件(删除原文件)
cc encrypt config.json --keep # 保留原文件
cc encrypt config.json --out secret.enc # 指定输出路径加密后的文件:
- 文件名:
原文件名.enc - 格式:
[16字节盐值] + [Fernet加密数据] - 扩展名:
.enc
# 基本用法
cc decrypt <加密文件路径>
# 常用选项
cc decrypt config.json.enc # 解密文件
cc decrypt config.json.enc --out config.json # 指定输出路径
cc decrypt config.json.enc --open # 解密后打开编辑器
cc decrypt config.json.enc --open --editor code # 指定编辑器(VS Code)支持的编辑器:
- Windows:
notepad,notepad++,code - macOS:
code,subl,open -e - Linux:
code,gedit,nano,vim
cc status显示信息:
- Keychain状态(可用/不可用)
- 主密码状态(已设置/未设置)
- 密码强度
cc reset-password需要:
- 验证当前密码
- 输入新密码
- 确认新密码
Windows:
# 方式1:双击启动文件
🔐 启动ConfigCrypt.bat
# 方式2:命令行启动
python run.pymacOS / Linux:
python run.py上半部分 - 拖拽区:
- 拖拽文件到此处进行加密/解密
- 左侧红色按钮:加密
- 右侧绿色按钮:解密
- 中间锁图标:视觉标识
下半部分 - 操作历史:
- 显示所有加密/解密操作记录
- 列:时间、操作、文件、输出、状态
- 刷新按钮:🔄 刷新历史
- 清除按钮:🗑️ 清除所有历史
首次启动会弹出"欢迎向导",引导您设置主密码。
- 点击"加密"按钮或拖拽明文文件
- 选择文件
- 在对话框中选择是否删除原文件
- 选择输出位置
- 等待加密完成
- 点击"解密"按钮或拖拽 .enc 文件
- 输入主密码验证
- 选择是否打开编辑器
- 选择输出位置
- 等待解密完成
-
文件菜单
- 打开文件 (Ctrl+O)
- 退出 (Ctrl+Q)
-
查看菜单
- 显示/隐藏历史面板
-
设置菜单
- 首选项(修改主密码)
-
帮助菜单
- 关于
ConfigCrypt 也可以作为Python库在其他项目中使用。
from configcrypt import VaultAPI
# 创建API实例
api = VaultAPI()
# 解密文件为字符串
content = api.decrypt_file("config.json.enc")
print(content)
# 解密JSON文件
config = api.decrypt_json("config.json.enc")
print(config["api_key"])
# 解密YAML文件
settings = api.decrypt_yaml("settings.yaml.enc")
print(settings["database"]["host"])
# 解密ENV文件
env_vars = api.decrypt_env(".env.enc")
print(env_vars["API_KEY"])from configcrypt import VaultAPI
# 使用自定义密码(不从Keychain读取)
api = VaultAPI(password="your_password_here")
data = api.decrypt_json("config.json.enc")解密文件并返回字符串内容。
content = api.decrypt_file("secret.txt.enc")解密JSON文件并返回字典。
data = api.decrypt_json("config.json.enc")
print(data["key"])解密YAML文件并返回字典。
config = api.decrypt_yaml("settings.yaml.enc")
print(config["database"])解密ENV文件并返回键值对字典。
env = api.decrypt_env(".env.enc")
print(env["DATABASE_URL"])from configcrypt import VaultAPI
from configcrypt.core.exceptions import (
DecryptionError,
InvalidTokenError,
ParseError,
)
api = VaultAPI()
try:
data = api.decrypt_json("config.json.enc")
except DecryptionError:
print("密码错误或文件损坏")
except InvalidTokenError:
print("文件已被篡改")
except ParseError as e:
print(f"JSON解析失败: {e}")
except FileNotFoundError:
print("文件不存在")- 对称加密: Fernet (AES-128-CBC + HMAC-SHA256)
- 密钥派生: PBKDF2-HMAC-SHA256(200,000轮迭代)
- 盐值: 每次加密生成16字节随机盐值
- 完整性: HMAC验证,防止篡改
- Windows: Windows Credential Manager
- macOS: macOS Keychain
- Linux: Secret Service (如 GNOME Keyring)
- ✅ 使用强密码 - 至少8个字符,包含大小写字母、数字、符号
- ✅ 定期更换密码 - 建议每3-6个月更换一次
- ✅ 备份加密文件 - 加密文件丢失无法恢复
- ✅ 保护主密码 - 忘记主密码无法解密文件
⚠️ 不要共享密码 - 主密码仅自己知道
ConfigCrypt 支持加密任何文件,但对以下格式提供原生解析支持:
| 格式 | 扩展名 | Library API | 说明 |
|---|---|---|---|
| JSON | .json |
decrypt_json() |
自动解析为Python字典 |
| YAML | .yaml, .yml |
decrypt_yaml() |
自动解析为Python字典 |
| ENV | .env |
decrypt_env() |
自动解析为键值对字典 |
| 文本 | .txt, .md, 等 |
decrypt_file() |
返回字符串内容 |
| 其他 | 任意格式 | decrypt_file() |
返回原始字节内容 |
# 加密API密钥配置
cc encrypt config.json --keep
# 提交到Git(只提交.enc文件)
git add config.json.enc
git commit -m "Add encrypted config"# 加密.env文件
cc encrypt .env
# 在应用中使用
python
>>> from configcrypt import VaultAPI
>>> api = VaultAPI()
>>> env = api.decrypt_env(".env.enc")
>>> import os
>>> os.environ.update(env)# database.yaml
database:
host: localhost
port: 5432
username: admin
password: secret_password_123cc encrypt database.yamlfrom configcrypt import VaultAPI
api = VaultAPI()
db_config = api.decrypt_yaml("database.yaml.enc")
# 使用数据库配置
conn = psycopg2.connect(
host=db_config["database"]["host"],
port=db_config["database"]["port"],
user=db_config["database"]["username"],
password=db_config["database"]["password"]
)# 加密SSH私钥
cc encrypt ~/.ssh/id_rsa --out ~/.ssh/id_rsa.enc
# 解密使用
cc decrypt ~/.ssh/id_rsa.enc --out ~/.ssh/id_rsa_temp
ssh -i ~/.ssh/id_rsa_temp user@server
rm ~/.ssh/id_rsa_tempA: 很遗憾,主密码忘记后无法恢复。ConfigCrypt不存储主密码的任何形式,只存储在系统Keychain中。如果忘记密码,已加密的文件将无法解密。
建议:
- 设置一个您能记住的强密码
- 将密码记录在安全的地方(如密码管理器)
- 定期备份未加密的文件
A: 可以,但需要在每台电脑上使用相同的主密码。ConfigCrypt的主密码存储在本地系统Keychain中,不同电脑的Keychain是独立的。
建议:
- 在所有电脑上设置相同的主密码
- 或者使用 Library API 时手动指定密码
A: 可以,但对方需要:
- 安装ConfigCrypt
- 知道您的主密码
- 在他们的系统上设置相同的主密码
更安全的方式:
- 使用非对称加密(如GPG)进行文件共享
- ConfigCrypt主要用于个人敏感文件保护
A: 可以!加密文件可以随意移动、重命名、复制。只要文件内容没有被修改,就可以正常解密。
A: 完全可以!GUI和CLI使用相同的加密引擎和主密码(从Keychain读取)。您可以用CLI加密,用GUI解密,反之亦然。
A: 当前版本不支持批量加密。您可以使用脚本循环调用CLI命令:
for file in *.json; do
cc encrypt "$file" --keep
donepip uninstall configcrypt清理数据:
- 删除
~/.configcrypt/目录(操作历史) - 从系统Keychain中删除ConfigCrypt条目
加密文件大小 ≈ 原文件大小 + 60字节(盐值16字节 + Fernet开销)
# 克隆仓库
git clone <repository-url>
cd configcrypt
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 安装开发依赖
pip install -e ".[dev]"# 运行所有测试
pytest
# 运行单元测试
pytest tests/unit/
# 运行集成测试
pytest tests/integration/
# 运行属性测试(基于 Hypothesis)
pytest tests/unit/test_properties.py
# 查看测试覆盖率
pytest --cov=configcrypt --cov-report=html
open htmlcov/index.html # 查看覆盖率报告# CLI测试
python -c "from configcrypt.cli import main; main()" -- init
python -c "from configcrypt.cli import main; main()" -- encrypt test.txt
# GUI测试
python run.py
# API测试
python tests/integration/test_api_integration.pyconfigcrypt/
├── .github/ # GitHub 配置
│ └── workflows/
│ ├── README.md # CI/CD 工作流说明
│ └── test.yml # GitHub Actions 测试工作流
│
├── src/ # 源代码目录
│ └── configcrypt/ # 主包
│ ├── __init__.py # 包初始化(导出 VaultAPI)
│ │
│ ├── cli/ # 命令行界面模块
│ │ ├── __init__.py # CLI 入口
│ │ └── commands.py # CLI 命令实现 (init, encrypt, decrypt, status, reset-password)
│ │
│ ├── core/ # 核心功能模块
│ │ ├── __init__.py # 核心模块初始化
│ │ ├── editor_launcher.py # 编辑器启动器
│ │ ├── exceptions.py # 自定义异常类 (DecryptionError, InvalidTokenError, etc.)
│ │ ├── format_parser.py # 格式解析器 (JSON/YAML/ENV)
│ │ ├── keychain_store.py # 系统 Keychain 存储 (Windows/macOS/Linux)
│ │ └── vault.py # 加密/解密核心逻辑 (Vault, VaultAPI)
│ │
│ ├── gui/ # 图形界面模块
│ │ ├── __init__.py # GUI 模块初始化
│ │ ├── app.py # GUI 应用主入口
│ │ ├── dialogs.py # 对话框组件 (密码输入、确认、进度等)
│ │ ├── history.py # 操作历史记录管理
│ │ ├── history_panel.py # 历史面板 UI
│ │ └── main_window.py # 主窗口 UI (拖拽区 + 历史记录)
│ │
│ └── utils/ # 工具模块
│ ├── __init__.py # 工具模块初始化
│ └── password_strength.py # 密码强度计算
│
├── tests/ # 测试目录
│ ├── __init__.py # 测试包初始化
│ │
│ ├── cli/ # CLI 测试
│ │ ├── __init__.py
│ │ ├── test_cli_commands.py # CLI 命令测试
│ │ └── test_cli_extended_commands.py # CLI 扩展命令测试
│ │
│ ├── gui/ # GUI 测试
│ │ ├── __init__.py
│ │ ├── test_dialogs.py # 对话框测试
│ │ ├── test_drop_zone_widget.py # 拖放组件测试
│ │ ├── test_dropzone_ui.py # 拖放UI测试
│ │ ├── test_file_type_recognition.py # 文件类型识别测试
│ │ └── test_main_window.py # 主窗口测试
│ │
│ ├── integration/ # 集成测试
│ │ ├── __init__.py
│ │ └── test_api_integration.py # API 集成测试
│ │
│ └── unit/ # 单元测试
│ ├── __init__.py
│ ├── test_editor_launcher.py # 编辑器启动器测试
│ ├── test_format_parser.py # 格式解析器测试
│ ├── test_keychain_acceptance.py # Keychain 验收测试
│ ├── test_keychain_store.py # Keychain 存储测试
│ ├── test_properties.py # 属性测试 (Hypothesis PBT - 12个正确性属性)
│ ├── test_vault.py # Vault 核心测试
│ ├── test_vault_api.py # Vault API 测试
│ ├── test_vault_file_operations.py # 文件操作测试
│ └── test_vault_format.py # 格式测试
│
├── .gitignore # Git 忽略规则
├── build_executable.py # PyInstaller 构建脚本
├── CHANGELOG.md # 变更日志
├── DISTRIBUTION_GUIDE.md # 分发指南
├── GITHUB_RELEASE_GUIDE.md # GitHub 发布指南
├── LICENSE # MIT 许可证
├── PYPI_RELEASE_GUIDE.md # PyPI 发布指南
├── pyproject.toml # 项目配置 (PEP 518)
├── README.md # 项目说明文档
└── TESTING_EXPLAINED.md # 测试说明文档
文件统计:
- 源代码:17个 Python 文件
- 测试文件:18个测试文件
- 文档文件:6个 Markdown 文档
- 配置文件:3个 (pyproject.toml, .gitignore, test.yml)
- 脚本文件:1个 (build_executable.py)
- 总计:45个文件
本项目采用 MIT License 开源协议。
欢迎贡献代码、报告问题、提出建议!
如果您发现 bug 或有功能建议,请创建 Issue 并提供:
- 详细的问题描述
- 复现步骤
- 您的系统环境(操作系统、Python 版本)
- 错误信息或截图
- Fork 本仓库
- 创建您的特性分支 (
git checkout -b feature/amazing-feature) - 编写代码和测试
- 确保所有测试通过 (
pytest) - 提交您的更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启 Pull Request
- 遵循 PEP 8 风格指南
- 添加适当的类型注解
- 为新功能编写测试
- 更新相关文档
- 项目: ConfigCrypt File Encryption Tool
- 版本: v1.0.0
- 许可证: MIT License
感谢以下开源项目:
- cryptography - 加密库
- keyring - Keychain集成
- PySide6 - GUI框架
- click - CLI框架
- ✅ 测试覆盖率 90%+ - 包含单元测试、CLI测试、GUI测试、集成测试
- ✅ 属性测试 - 使用 Hypothesis 进行基于属性的测试
- ✅ CI/CD - GitHub Actions 自动化测试(Windows/macOS/Linux)
- ✅ 类型注解 - 完整的类型提示,支持 IDE 智能提示
- ✅ 文档完善 - 详细的 README、API 文档、测试报告
ConfigCrypt - 让文件加密变得简单安全
Made with ❤️ using Python