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





4.00/5 (3投票s)
2002年8月14日
2分钟阅读

60635

976
.NET 命令行实用程序,通过对称加密实现文件安全。
摘要
文件安全 (fs) 实用程序实现了我之前在本网站上介绍的 CCrypto
和 CDir
类。本文的目的是演示如何将这些类与 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()
函数将 CFileSecurity
和 CDir
类实例化为对象,然后处理通过 (argc, *argv[])
接收到的参数。参数开关设置对象的属性,这些属性决定了实用程序的特征。
实际上,该实用程序由三个类组成:CCrypto
、CFileSecurity
和 CDir
。CDir
类处理文件和文件夹。CCrypto
类包含擦除、加密、解密、创建文件密钥和散列文件的方法。CFileSecurity
是介于这两个对象之间的中间人。
CFileSecurity
类在 CDir
类的文件处理和 CCrypto
类之间创建了一个抽象层。在抽象层中,根据命令行开关设置属性。在开始文件处理之前,CFileSecurity::SettingsOK()
方法会对开关进行一些有效性检查。例如,一个检查将确保我们在加密或解密时拥有密钥。
在有效性检查之后,CCrypto
类通过 CFileSecurity::InitializeCrypto()
方法被实例化为一个对象。该方法调用相应的 CCrypto
构造函数并设置一些属性。CFileSecurity::ProcessFile(FilePath)
方法确定调用哪个 CCrypto
方法来处理文件。
CDir::dir
方法处理满足用户定义的当前目录中过滤器的文件。每个与过滤器匹配的文件都传递给 CFileSecurity::ProcessFile
进行处理。如果启用了递归,则文件夹路径也将通过将每个路径传递回 dir
方法来处理。
问题
使用该实用程序时,没有出现任何问题。尽管可以列出一些可以进行的改进。我想到的一个例子是防止加密用于加密的密钥。
我不太喜欢我处理命令行参数的方式。如果有人知道更优雅的方式,我很想知道。