文件加密工具的设计与实现

在数字时代,数据安全变得越来越重要。为了保护敏感信息,决定编写一个简单且直观的文件加密工具。这个工具使用Blowfish加密算法来加密文本和二进制文件。它还可以创建自解压的加密文件。如果对如何创建自解压可执行文件感兴趣,可以查看另一篇文章《创建自解压可执行文件》。

功能特点

文件加密工具具有以下特点:

  • 快速且高效的文件加密/解密。
  • 内置文件擦除工具。
  • 创建自解压加密文件。
  • 资源管理器集成(通过配置对话框)。
  • 命令行参数支持。

编程语言与库

文件加密工具使用原生C++编写,仅使用ATL进行窗口类处理。ATL的使用非常少,即使是不熟悉该库的人也应该能够理解代码。

项目结构

文件加密工具被划分为几个小项目:

  • FileEnc - 文件加密工具的用户界面,包含用于读取/写入文件的Processing类。
  • Enc_Blowfish - Blowfish加密实现(基于Bruce Schneier和Jim Conger的实现)。
  • SelfExtract - 自解压可执行文件的“头部”。
  • GenLib - 包含所有其他项目部分中常用项目的小型库。
  • Builder - 创建最终文件加密可执行文件的小型控制台工具

为了节省时间并拥有一个通用目的类的中心点,正在使用一个名为GenLib的静态库。这个版本的GenLib包含了以下通用目的类:

  • GenFiles - 打开文件/保存文件和打开目录对话框。
  • SelfExtract - 创建自解压可执行文件。
  • Thread - 实现一个父类,供想要在单独线程中执行代码的类使用。
  • FileWipe - 从硬盘上擦除文件。

所有这些类都在GenLib命名空间下。

额外的加密选项

在FileEnc项目中有一个名为EncryptionInterface的接口,实现这个接口可以轻松更改工具使用的加密方式。实现这个接口只需要流密码实现,并且可以节省处理文件的开销。Blowfish实现是静态链接到工具中的,以避免通过更改DLL进行黑客攻击。只需几分钟的工作,工具就可以支持在运行时根据用户决定加载的多个加密DLL。

安全性

为了使工具尽可能安全,尝试在应用程序关闭时从内存中擦除信息。在查看源代码时,可以看到使用了ZeroMemory API和其他一些API来从内存中删除信息(如使用的密码)。在加密文件时,可以勾选“处理后擦除源文件”复选框,以确保正在加密的文件不可访问。

注意事项

解密不验证密码的正确性(信息被加密而没有添加任何关于文件的信息)。因此,使用错误的密码解密时,将收到一个包含垃圾内容的文件 - 这不是一个错误。文件加密基于密码长度 - 更长的密码等于更好的安全性。尽管相信文件擦除方法是相当安全的,但为了100%确定,应该使用专门用于此目的的产品。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485