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

命令行文件安全 (fs) 工具

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (3投票s)

2002年8月14日

2分钟阅读

viewsIcon

60635

downloadIcon

976

.NET 命令行实用程序,通过对称加密实现文件安全。

摘要

文件安全 (fs) 实用程序实现了我之前在本网站上介绍的 CCryptoCDir 类。本文的目的是演示如何将这些类与 C++ 的托管扩展一起使用,以创建一个可用的命令行实用程序。

在我深入幕后之前,让我先介绍一下该实用程序演示的一些代码功能。该实用程序实现了参数处理、文件过滤和目录递归、文件擦除、加密、解密以及 MD5 和 SHA-1 散列。加密和解密是通过 Rijndael 算法进行的,密钥空间为 256 位。

尽管用户界面可能并不完全友好,但我相信命令行实用程序仍然有一席之地。

命令的语法

 fs [-?] [-r] [-q] 
   { [-w #] | [-e] | [-d] | [-l] | [-sha] | [-md5] [-KEY drv:\file] }
   { [-p password] | [-k drv:\file] }
     [-x .ext] [-o drv:\folder] [[drv:\file]...]

参数定义

 -w #   Wipe file with # passes (default is 7 wipes)
 -e     Encrypts file(s) (requires parameters {-p | -f})
 -d     Decrypts file(s) (requires parameters {-p | -f})
 -sha   SHA-1 signature
 -md5   MD5 signature
 -l     Lists file(s) only
 -q     quiet mode
 -KEY   Make key file
 -p     Sets the password for encryption or decryption
 -k     Sets key file for encryption or decryption
 -r     Recursive on sub directories and files
 -x     Set file extension for encrypted file(s) (default is .crypt)
 -o     Set directory location for encrypted files
 -?     This help screen

Example usage

擦除当前目录中的所有 *.txt 文件

fs -w 10 *.txt

使用密钥文件 c:\key.zzz 将驱动器上的所有 *.msg*.txt 文件加密到文件夹 c:\encrypted

fs -r -e -o c:\encrypted -k c:\key.zzz c:\*.msg  c:\*.txt

幕后

_tmain() 函数是可执行文件的入口点。_main() 函数将 CFileSecurityCDir 类实例化为对象,然后处理通过 (argc, *argv[]) 接收到的参数。参数开关设置对象的属性,这些属性决定了实用程序的特征。

实际上,该实用程序由三个类组成:CCryptoCFileSecurityCDirCDir 类处理文件和文件夹。CCrypto 类包含擦除、加密、解密、创建文件密钥和散列文件的方法。CFileSecurity 是介于这两个对象之间的中间人。

CFileSecurity 类在 CDir 类的文件处理和 CCrypto 类之间创建了一个抽象层。在抽象层中,根据命令行开关设置属性。在开始文件处理之前,CFileSecurity::SettingsOK() 方法会对开关进行一些有效性检查。例如,一个检查将确保我们在加密或解密时拥有密钥。

在有效性检查之后,CCrypto 类通过 CFileSecurity::InitializeCrypto() 方法被实例化为一个对象。该方法调用相应的 CCrypto 构造函数并设置一些属性。CFileSecurity::ProcessFile(FilePath) 方法确定调用哪个 CCrypto 方法来处理文件。

CDir::dir 方法处理满足用户定义的当前目录中过滤器的文件。每个与过滤器匹配的文件都传递给 CFileSecurity::ProcessFile 进行处理。如果启用了递归,则文件夹路径也将通过将每个路径传递回 dir 方法来处理。

问题

使用该实用程序时,没有出现任何问题。尽管可以列出一些可以进行的改进。我想到的一个例子是防止加密用于加密的密钥。

我不太喜欢我处理命令行参数的方式。如果有人知道更优雅的方式,我很想知道。

© . All rights reserved.