一款简单、安全的文件加密工具,附带 ZIP 压缩/解压功能。
SafeFile 是一款基于 AES-256-CBC 加密算法的文件保护工具。它能够对任意文件进行加密,生成 .sf 格式的密文,并支持设置有效期限和CRC32 完整性校验。此外,内置的 ZIP 压缩/解压功能让文件打包更加便捷。
无论是个人敏感资料还是工作文档,SafeFile 都能为您的数据提供可靠的安全保障。
- 强加密 – 采用 AES-256-CBC,密钥经双重 SHA-256 哈希派生,每个文件使用随机 IV。
- 时间锁定 – 加密时可指定截止日期,超时后无法解密(支持 NTP 时间同步)。
- 完整性校验 – 加密时嵌入 CRC32 校验码,解密时自动验证文件是否被篡改。
- 兼容旧版 – 支持解密 v1/v2 格式的
.sf文件,平滑过渡。 - 图形界面 – 基于 SunnyUI 的美观界面,操作直观,无需命令行。
- ZIP 工具 – 内置文件夹压缩与解压功能,满足日常归档需求。
- 操作系统:Windows 7 / 8 / 10 / 11
- 运行时:.NET Framework 4.8 或更高版本(或 .NET Core 3.1+,取决于编译配置)
- 依赖库:
- SunnyUI(UI 控件)
- GuerrillaNtp(NTP 时间同步)
- 从 Releases 页面下载最新的
SafeFile.exe。 - 解压(如果需要)后双击
SafeFile.exe运行,无需安装。
- 打开软件,切换到 “加密文件” 标签页。
- 点击 “选择文件” 选取待加密的文件。
- 点击 “选择输出文件夹” 指定密文保存位置(文件名自动添加
.sf后缀)。 - 输入密码(最长 25 位),可勾选“显示密码”查看明文。
- 设置 许可时间(即文件可被解密的最后期限)。
- 点击 “加密”,等待完成。
- 切换到 “解密文件” 标签页。
- 点击 “选择文件” 选取
.sf密文文件。 - 点击 “选择输出文件夹” 指定解密后文件的存放目录。
- 输入加密时使用的密码。
- 点击 “解密”,程序会自动校验密码、有效期和完整性。
- 成功则还原原始文件;失败会弹出具体错误提示。
- 压缩:在 “打包文件” 标签页,选择待压缩文件夹和输出目录,点击 “压缩” 即可生成
SafeFile_日期_Compress.zip。 - 解压:选择
.zip文件,指定解压目标文件夹,点击 “解压”。
加密后的 .sf 文件包含以下信息(v3 版本):
| 字段 | 长度 | 说明 |
|---|---|---|
| 头部总长度 | 2 字节 | 用于定位文件名 |
| 版本号 | 2 字节 | 当前为 3 |
| 原始文件长度 | 8 字节 | 用于恢复文件大小 |
| 密钥哈希 | 32 字节 | 双重 SHA-256 的密码哈希 |
| 许可时间 | 8 字节 | DateTime.ToBinary() 格式 |
| 初始化向量 (IV) | 16 字节 | 随机生成 |
| 文件名(UTF-8) | 可变 | 用于恢复原始文件名 |
| 加密数据 | 可变 | 每个 1MB 块前附加 4 字节 CRC32 |
- 克隆仓库:
- 使用 Visual Studio 2019 或更高版本打开解决方案文件
SafeFile.sln。 - 选择
Release配置,生成解决方案。 - 在
bin\Release目录下找到可执行文件。
- 密钥派生:用户密码经过两次 SHA-256 运算,得到 32 字节密钥,防止彩虹表攻击。
- 随机 IV:使用
RNGCryptoServiceProvider生成 16 字节 IV,确保相同文件每次加密结果不同。 - 防篡改:CRC32 校验覆盖每个数据块,解密时检测任何数据损坏或恶意修改。
- 时间验证:解密时通过 NTP 服务器获取标准时间(失败则使用本地时间),与许可时间比较,杜绝联网时修改系统时间绕过的风险。
- 兼容旧版:v1/v2 使用固定 IV 和 Zero 填充,安全性较低,建议新文件使用 v3。
Q:忘记密码怎么办?
A:密码无法恢复,请务必妥善保管。加密时建议使用密码管理器。
Q:解密时提示“文件已过期”怎么办?
A:请联系加密者重新设置更晚的许可时间,或断网调整系统时间(不推荐,且 NTP 同步会规避此操作)。
Q:CRC32 校验失败是什么原因?
A:说明文件在传输或存储过程中被修改,请重新获取原始 .sf 文件。
Q:可以加密多大文件?
A:默认普通模式(类型 0)支持最大 512 MB,大文件模式(类型 1)支持 8 GB(代码中可通过 ActEncType 切换,界面未暴露,需自行修改)。
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建您的特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
请确保代码风格与现有代码一致,并添加必要的注释。
本项目采用 自定义协议* 授权,详情请参见 LICENSE 文件。
- 作者:StartWhite
- 邮箱:yunfanbai@hotmail.com
- 项目主页:https://github.com/yourusername/SafeFile
如果觉得本项目对您有帮助,请给个 ⭐ Star 支持一下!