65.9K
CodeProject 正在变化。 阅读更多。
Home

文件加密工具

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.70/5 (19投票s)

2002年9月20日

GPL3

3分钟阅读

viewsIcon

291374

downloadIcon

13421

基于Blowfish加密算法的文件加密实用程序。

Sample Image - FileEncryption.jpg

引言

在经过长时间的搜索,寻找一个简单又安全的文件加密实用程序,并且使用起来简单直观后,我决定自己写一个。

文件加密实用程序是一个简单的工具,用于使用Blowfish加密算法对文本和二进制文件进行加密。

该实用程序可以创建一个自解压加密文件。要深入了解如何创建自解压可执行文件,请查看我的另一篇文章:创建自解压可执行文件

特点

文件加密实用程序具有以下功能

  • 快速文件加密/解密。
  • 内部文件擦除实用程序。
  • 创建自解压加密文件。
  • 资源管理器集成(通过配置对话框)。
  • 命令行参数。

语言

文件加密实用程序是用本地C++编写的,仅使用ATL进行窗口类化。

ATL的使用是最小化的,因此任何不熟悉该库的人也应该能够理解代码。

概述

文件加密实用程序被分为几个小项目

  • FileEnc – 文件加密实用程序的 UI,还包含Processing类,该类也被SelfExtract使用,负责读/写文件。
  • Enc_Blowfish – Blowfish加密实现(基于Bruce Schneier和Jim Conger的实现)。
  • SelfExtract – 自解压可执行文件“标头”。
  • GenLib – 小型库,保存其他项目部分中所有常用的项目。
  • Builder – 用于创建最终的文件加密可执行文件的小型控制台实用程序。

GenLib – 通用库

为了节省时间并拥有所有通用类别的中心点,我正在使用一个名为GenLib的静态库。

文件加密实用程序提供了一个GenLib的精简版本。 在此版本中,您可以看到以下通用类

  • GenFiles – 打开OpenFile/SaveFile和OpenDirectory对话框。
  • SelfExtract – 创建自解压可执行文件。
  • Thread – 想要在单独线程中执行代码的类的父类的实现(更多信息可以在标头中看到 – thread.h)。
  • FileWipe – 从硬盘驱动器擦除文件。

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

附加加密

FileEnc项目中,有一个名为EncryptionInterface的接口 - 实现此接口可以让你轻松更改实用程序使用的加密方式。

实现此接口只需要流密码实现,并节省了使用文件的所有开销。

Blowfish的实现被静态链接到该实用程序中,以避免通过更改dll进行黑客攻击。 只需几分钟的工作,该实用程序就可以支持许多可以在运行时根据用户的决定加载的加密dll。

安全

为了使该实用程序尽可能安全,我尝试在应用程序关闭时从内存中擦除信息。

查看源代码时,您可以看到我使用了ZeroMemory API和其他几个API来从内存中删除信息(例如使用的密码)。

加密文件时,您可以选中“处理后擦除源”复选框,从而确保您正在加密的文件不可访问。

备注

解密不会验证密码的正确性(加密信息时没有添加关于文件的任何信息)。 因此,使用错误的密码解密时,您将收到一个内部包含垃圾的文件 - 这不是一个错误。

文件加密基于密码长度 - 密码越长,安全性越高。

尽管我相信文件擦除方法非常安全,但要确保100%安全,您应该使用专门为此目的设计的商品。

参考

Blowfish加密算法 - http://www.schneier.com/paper-blowfish-fse.html

修订历史

2002年9月23日 - 初始修订版

© . All rights reserved.