Skip to content
yunfan007Public

About

一个基于AES加密,带有过期功能的单文件加密软件

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

SafeFile

一款简单、安全的文件加密工具,附带 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+,取决于编译配置)
  • 依赖库:

🚀 快速开始

下载安装

  1. 从 Releases 页面下载最新的 SafeFile.exe。
  2. 解压(如果需要)后双击 SafeFile.exe 运行,无需安装。

加密文件

  1. 打开软件,切换到 “加密文件” 标签页。
  2. 点击 “选择文件” 选取待加密的文件。
  3. 点击 “选择输出文件夹” 指定密文保存位置(文件名自动添加 .sf 后缀)。
  4. 输入密码(最长 25 位),可勾选“显示密码”查看明文。
  5. 设置 许可时间(即文件可被解密的最后期限)。
  6. 点击 “加密”,等待完成。

解密文件

  1. 切换到 “解密文件” 标签页。
  2. 点击 “选择文件” 选取 .sf 密文文件。
  3. 点击 “选择输出文件夹” 指定解密后文件的存放目录。
  4. 输入加密时使用的密码。
  5. 点击 “解密”,程序会自动校验密码、有效期和完整性。
  6. 成功则还原原始文件;失败会弹出具体错误提示。

ZIP 压缩/解压

  • 压缩:在 “打包文件” 标签页,选择待压缩文件夹和输出目录,点击 “压缩” 即可生成 SafeFile_日期_Compress.zip。
  • 解压:选择 .zip 文件,指定解压目标文件夹,点击 “解压”。

📁 文件格式说明

加密后的 .sf 文件包含以下信息(v3 版本):

字段 长度 说明
头部总长度 2 字节 用于定位文件名
版本号 2 字节 当前为 3
原始文件长度 8 字节 用于恢复文件大小
密钥哈希 32 字节 双重 SHA-256 的密码哈希
许可时间 8 字节 DateTime.ToBinary() 格式
初始化向量 (IV) 16 字节 随机生成
文件名(UTF-8) 可变 用于恢复原始文件名
加密数据 可变 每个 1MB 块前附加 4 字节 CRC32

🔧 从源码构建

  1. 克隆仓库:
  2. 使用 Visual Studio 2019 或更高版本打开解决方案文件 SafeFile.sln。
  3. 选择 Release 配置,生成解决方案。
  4. 在 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!

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

请确保代码风格与现有代码一致,并添加必要的注释。


📄 许可证

本项目采用 自定义协议* 授权,详情请参见 LICENSE 文件。


📧 联系方式


如果觉得本项目对您有帮助,请给个 ⭐ Star 支持一下!

About

一个基于AES加密,带有过期功能的单文件加密软件

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages