文件校验和完整性验证器 (FCIV) 示例
- Microsoft FCIV(文件校验和完整性验证器)是一个免费的命令行实用程序,用于生成文件的哈希值(校验和)。稍后,可以将这些哈希值与新生成的哈希值进行验证,以发现文件是否发生了变化。
- 存在选项用于包含或排除子文件夹,选择算法以及定向输出。
- 该实用程序可以对单个文件、文件夹或递归地对大型文件夹结构进行哈希值生成。.
- 可用的哈希算法有 MD5 和 SHA1。
- 哈希结果和验证结果可以发送到文件,也可以在屏幕上查看。。Base64 格式仅用于文件输出,而 HEX 和 base64 都可以在屏幕上使用。
- 哈希文件输出以.xml数据库格式生成。
- 验证文件输出可以以.txt文本文件格式生成。
- 可以使用特殊文本文件中的列表将文件夹和文件从哈希运行中排除。
- 哈希文件是一次性运行,不会进行任何类型的增量更新。.
- Microsoft 的 FCIV 下载可从文件校验和完整性验证器实用程序的可用性和说明中获得,以 zip 文件形式提供。这不是微软网站,因为该组织不再支持该应用程序,而是一个存档页面,从中仍然可以获得该应用程序。
- fciv.exe文件可以安装在任何方便的位置。为了避免需要排除文件(在 fciv.exe 文件正在运行时,无法对其进行哈希值生成!),可以将 FCIV 文件夹放在您不太可能要进行哈希值生成的位置。或者,微软建议将 fciv.exe 路径添加到系统路径列表中。这样一来,只需键入文件名即可运行它;另一个快速的解决方案是将文件放在已经列出的位置,例如C:\Windows\System32。
- 对于那些打算将路径拖放到命令窗口或从保存的文本中粘贴路径的人来说,长路径不是问题。由于这些示例是为那些不熟悉该主题的人准备的,因此所有这些示例都包含完全表达的路径。
- 下面下拉框中给出了 FCIV 命令和选项的参考。
文件校验和完整性验证器 (FCIV) 命令和选项 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
命令窗口屏幕基础 |
---|
命令窗口基础
所有 Windows 计算机上都提供命令窗口屏幕。它允许用户在没有我们习以为常的 Windows GUI(图形用户界面)的情况下运行程序。特别是,它允许用户运行 FCIV 实用程序。 以下是为不熟悉命令窗口使用的人提供的一些基础知识
命令窗口基本路径
打开cmd时,闪烁的提示显示其默认路径,例如C:\>。此路径是用户在提示符后键入的任何路径的基本部分。这允许更短的键入条目。或者,用户可以忽略默认设置,只需在任何情况下都键入一个完全表达的路径。可以使用cd命令(Change Directory的缩写)轻松更改默认基本路径。 典型基本路径提示
C:\> 更改基本路径
更改基本路径的首选方法当然是使用上面基本部分中描述的在此处打开命令窗口方法打开命令窗口。但是,当打开提升的提示或命令窗口已打开时,需要在命令行更改基本路径。以下示例是基本路径更改操作中最常用的方法。 要转到根目录,请键入 cd\ 或 cd/,然后按 Enter 要转到上一级目录,请键入 cd..,然后按 Enter 要中断长时间运行的进程,请按 Ctrl + C 要使提示路径显示为 C:\users,请键入 C:\users,然后按 Enter 要在不运行当前命令行的情况下返回到当前提示符,请键入 >,然后按 Enter 要打开带有复杂基本路径的标准命令提示符,请执行以下操作。 转到 Windows 资源管理器。 在基本路径上构建
完整地址是明确的,但有时用户需要通过使用提示符的基本路径来利用缩短的条目。以下示例显示了要添加的字符。需要注意的是,在下面的示例中,我们可以将任意数量的目录作为默认提示符的一部分,但通过注意到其中三个目录是两个路径共有的,可以获得最佳优势。需要提及一种额外的方法。存在一个环境变量,它允许替换所有路径元素,直到用户命名的文件夹,包括用户命名的文件夹。以下也显示了此示例。 这是在根命令提示符下编写的一个常用哈希命令的完整形式; 注意,有一个点后跟一个反斜杠,表示连接到默认路径。您可以将点视为表示命令提示符符号>左侧的所有条目。默认值适用于命令中的所有路径,而不仅仅是最接近的路径。还要注意,这两个缩短路径都被引号括起来,这样做更多是为了演示这种技术,而不是出于必要性,因为这些路径名现在不包含空格。这些条目的完整表达形式或缩短形式都可以正常工作。 更改默认打开目录
当cmd或其他类似的控制台应用程序在最佳目录以外打开时,始终更改基本路径可能很费力。解决方案是在您想要的位置打开它。使用现有的快捷方式或为该任务创建的快捷方式,打开快捷方式的属性,找到名为打开方式的文本字段。将其内容更改为所需的路径,例如,根目录为C:\。单击确定,就完成了。将需要再次调整窗口选项才能使用此快捷方式打开。如果您的属性版本中缺少打开方式文本字段,您可以在目标地址后键入cd C:\;确保在键入之前包含一个空格;这将执行相同的操作。 CMD 时间节省器
在命令提示符下工作时,有一些节省时间的功能。
|
制作哈希值
[edit | edit source]- 在制作哈希数据库时,通常需要考虑最多四种路径。它们分别是 fciv.exe 文件本身的路径、要哈希的目标文件夹或文件的路径、排除文件路径以及输出数据的预期目标路径。通常情况下的通用形式是
[UtilityPath] [ -add (默认) TargetFilePath [ -r ]] [ -exc ExclusionFilePath ] [ -xml OutputFilePath ] [ -sha1 | -md5 | -both (默认 -md5) ]
- 路径中的空格会导致问题。尽管 Windows 资源管理器可以处理文件名和文件夹中的空格,但命令窗口却不能。请注意,示例中使用的路径就是这样,但为了避免问题,所有路径都已用双引号括起来。
- 考虑使用完整表达的路径。新手在编写路径时可能会感到困惑,尤其是在连接到基本路径时。如果存在或怀疑此类问题,请构建完整的表达路径以排除此问题作为错误的来源。
- FCIV 使用两种类型的选项。有些选项用于特定命令,有些选项更通用。有时选项的顺序不正确会导致错误,因此在放置选项时请遵循文本中的示例。
屏幕上的哈希值 - 示例
[edit | edit source]以下命令行代码在屏幕上显示单个MyText.txt 文件的哈希值。当以这种方式完整地写入地址时,命令提示符显示哪个基本地址并不重要。默认情况下,哈希算法为MD5,但为了完整起见,这里已指定它。对于SHA1 哈希,只需将-md5 替换为-sha1,或者如果您想要两种哈希类型,则将其替换为-both。请注意,选项前都有减号。
单个文件哈希
[edit | edit source]"c:\Users\My Folder\Downloads\FCIV\fciv.exe" "c:\Users\My Folder\Documents\MyText.txt" -md5
请注意,代码假定fciv.exe 文件本身位于用户Downloads 文件夹中的名为FCIV 的文件夹中。在下一个示例中,单个文件路径已替换为文件夹的名称。
平面文件夹哈希
[edit | edit source]"c:\Users\My Folder\Downloads\FCIV\fciv.exe" "c:\Users\My Folder\Documents" -sha1
这里,将对Documents 文件夹(但不包括其子文件夹)进行 SHA1 哈希并列在屏幕上。在以下示例中,使用-r 选项来引入递归哈希,对Documents 中的所有子文件夹进行哈希。
递归文件夹哈希
[edit | edit source]"c:\Users\My Folder\Downloads\FCIV\fciv.exe" "c:\Users\My Folder\Documents" -r -both
在上面的示例中,对整个Documents 文件夹及其所有子文件夹都进行了 SHA1 和 MD5 哈希,结果显示在屏幕上。在这种情况下,可能存在太多文件,无法方便地查看屏幕上的文件。将数据导出到数据库文件可以提供更永久的列表,并且更容易阅读。这将在下一节中介绍。
哈希值到文件 - 示例
[edit | edit source]上一节中给出的简单示例将其结果发送到屏幕。在每种情况下,都可以修改这些示例,以便将结果发送到数据库文件。使用此类文件时,数据会被重定向,因此屏幕上不会显示任何哈希值。必须给出文件的格式详细信息,在本例中使用-xml,紧随其后是xml 文件本身的路径。此文件最初不必存在。如果它不存在,则该过程将在加载之前创建该文件。如果该文件存在,无论是否有内容,都将追加数据。请注意,尽管屏幕哈希值以十六进制形式写入,但发送到文件的哈希值采用 Base64 形式;这些哈希值将被转换为用于任何验证工作。以下示例基于上面的递归示例,并使用选项-both 制作一个使用两种哈希类型的数据库。
递归文件夹哈希到文件
[edit | edit source]"c:\Users\My Folder\Downloads\FCIV\fciv.exe" "c:\Users\My Folder\Documents" -r -xml "c:\users\My Folder\Downloads\MyHash.xml" -both
如果进程创建了自己的数据库文件,它将在屏幕上提示发生错误。但是,进程将继续正常运行,并且可以在预期的地址找到数据库文件。此文件夹的哈希运行在作者的 PC 上需要几分钟时间,闪烁的游标是其工作的唯一线索。它在屏幕上通知文件完成。尝试在运行完成之前找到 XML 文件将找到一个几乎为空的文件。在 MS Word 中打开 XML 文件会产生最整洁的输出,尽管任何文字处理程序或文本编辑器都可以。在任何运行期间发现的错误都会写入文件 fciv.err,并且最好将其放置在 fciv.exe 文件本身附近。
其他输出方法
[edit | edit source]主要的输出方法如前所述,屏幕或 XML 文件。但是需要注意的是,还有两种其他方法。
- 直接输出到剪贴板。要将输出直接发送到剪贴板,只需添加一个空格,然后是一个竖线 (|),然后是单词 clip。不会出现屏幕显示,但输出将在剪贴板上找到,随时可以使用。
- 直接输出到文本文件。可以使用一个简单的文本文件,而不是 XML 文件。最通用的方法是将输出管道到文本文件。也就是说,只需添加一个空格,然后是一个大于符号 (>),然后是文件的路径。如果指定位置不存在该文件,则将创建该文件。由于 XML 文件始终包含 base64 格式,而屏幕输出始终为 HEX,因此这是获取具有 HEX 格式的文件副本的唯一方法。
- 只使用一种方法,不能同时使用两种方法。在将输出管道到文本文件后发送到剪贴板将导致剪贴板为空字符串。一次只能使用一种输出方法。
排除文件 - 示例
[edit | edit source]排除文件是一个文本文件,其中包含要从哈希处理中排除的文件和文件夹的路径。每个路径都应单独写在一行上,并且不需要加引号。但是,最后一行必须在保存之前以回车符结尾,否则该文件将无法正常工作。以下完全表达的路径为 Downloads 文件夹(包括其子文件夹)中的所有文件创建了一个名为 MyHash.xml 的外部 SHA1 哈希数据库,但排除了名为 Ignorefiles.txt 的排除文件中列出的三个文件夹和三个文件。
递归文件夹哈希到具有排除项的文件
[edit | edit source]c:\>"C:\Users\My Folder\Downloads\FCIV\fciv.exe" "C:\Users\My Folder\Downloads" -r -exc "C:\Users\My Folder\Downloads\Ignorefiles.txt" -xml "C:\Users\My Folder\Downloads\MyHash.xml" -sha1
以下列表显示了创建排除文件 Ignorefiles.txt 时要使用的格式。条目与正在哈希的文件夹完全不同,这一点并不重要。这样,就可以在一个文件中为用户的全部任务设置排除项。
排除文件格式
[edit | edit source]c:\Users\My Folder\Downloads\fciv.err
C:\Users\My Folder\Documents\fciv.err
c:\Users\My Folder\Downloads\FCIV
c:\Users\My Folder\Downloads\Hashes
c:\Users\My Folder\Downloads\HashOfHashes
c:\Users\My Folder\Downloads\Ignorefiles.txt
c:\Users\My Folder\Downloads\MyHash.xml (编辑备注:内容的最后一行必须以回车符结尾)
使用 VBA 将哈希值写入文件
[edit | edit source]VBA 可用于自动化哈希文件的生成,但据了解,它无法用于获取验证结果。为此,仍然需要命令行。
下面下拉面板中的 VBA 代码适用于最实用的情况——将 SHA1 哈希值导出到 Documents 树的数据库 xml 文件。它还允许使用排除文件。输出文件可以具有相同的名称,因为每个文件都添加了日期时间戳。出于必要性,路径是针对测试用例而特定的。需要注意的是,VBA 需要修改很多引号才能将带有引号的路径传递到命令行。这是因为命令行中的路径中的空格会导致 文件未找到 错误。
使用 VBA 还存在另一个特殊之处。Shell 函数在启动后独立于启动过程运行。这意味着当 Shell 函数仍在运行时,过程将退出。如果只有一个对 Shell 函数的调用,并且它创建的文件不用于代码中,那么一切正常,否则必须引入延迟以避免与部分输出产品交互。此外,还注意到,此类任务的完成时间可能会有很大差异,具体取决于处理器的其他优先级。此代码引入了这样的延迟,尽管如果 VBA Shell 函数本身具有延迟会更好。
用于创建整个 Documents 树的 FCIV 哈希文件的 VBA 代码 |
---|
Sub HashFileTreeFCIV()
'exports an sha1 hash for the Documents file tree, less exclusions, to an xml file
'If used in an automated process, adjust the delay to allow completion before further work
'The user should modify the paths to suit his own work
'Uses Microsoft FCIV utility. (https://support.microsoft.com/en-us/kb/841290)
Dim Ret, sU As String, sD As String, sN As String, sRP As String
Dim sE As String, sR As String, sP As String, sT As String
'path and name of the fciv utility
sU = """" & "c:\users\My Folder\Downloads\FCIV\fciv.exe" & """"
'path for the documents tree folder to hash
sD = """" & "C:\users\My Folder\Documents" & """"
'path and name of exclusions file
sE = """" & "c:\users\My Folder\Downloads\Ignorefiles.txt" & """"
'time stamped results file name
sN = "MyHash.XML"
sT = TimeStamped(sN)
'path of results xml file
sRP = "C:\users\My Folder\Downloads\Hashes"
sR = """" & sRP & "\" & sT & """"
'string for the shell function's parameter string
'The clipboard and piped text file methods do not work for this construct
sP = sU & " " & sD & " -r -exc " & sE & " -sha1 -xml " & sR
'This delay prevents closure of the process while the Shell function is still running.
'Eg: Use 15 seconds for ten files or so, and 300 seconds for a big Docs folder.
'If the output file is made but is empty, simply rerun with an extended delay time.
Ret = Shell(sP)
Delayed (90) 'seconds
MsgBox "Hash run is complete"
End Sub
Function Delayed(PauseTime As Single) As Boolean
'delays for PauseTime seconds
Dim Start As Single
Start = Timer ' Set start time.
Do While Timer < Start + PauseTime
DoEvents 'Yield to other processes.
Loop
Delayed = True
End Function
Function TimeStamped(sOldName As String) As String
'adds a date time stamp onto the existing file name
Dim vN As Variant
If sOldName = "" Then
MsgBox "Empty string input in TimeStamped - closing without change"
Exit Function
Else
End If
'split at the dot
vN = Split(sOldName, ".")
TimeStamped = vN(0) & "-" & Format(Now, "dd-mmm-yy hh""h"" mm""m"" ss""s""") & "." & vN(1)
End Function
|
验证哈希值
[edit | edit source]屏幕验证 - 示例
[edit | edit source]使用 -v 选项对哈希文件进行实际计算机文件中引用的实际计算机文件进行验证。包含哈希值的 xml 文件要发挥作用,必须使用完整地址路径创建;也就是说,不使用 -wp 或 -bp 选项。显然,如果使用特定算法创建哈希值,则必须在验证命令行中指定相同的算法。如果使用 -both 选项包含两种哈希类型,那么用户必须指定要用于验证的哈希类型。也就是说,其使用的一般形式如下
UtilityPath -v -xml HashFilePath [ -sha1|-md5 (默认 -md5) ] [ > OutputTextFilePath]
在其最简单的形式中,验证文件哈希值的命令行如下所示
XML 文件验证到屏幕
[edit | edit source]c:\>"C:\Users\My Folder\Downloads\FCIV\fciv.exe" -v -xml "C:\Users\My Folder\Downloads\MyHash.xml" -sha1
假设该文件包含 SHA1 值。还假设该文件中提供了完整的路径以进行检查。此函数的一个有用补充是将结果导出到文本文件而不是屏幕。以下示例导出到文本文件 MyText.txt。如果该文件不存在,则该过程将创建该文件。如果该文件存在,则将追加报告。
验证到文件 - 示例
[edit | edit source]XML 文件验证到文件
[edit | edit source]c:\>"C:\Users\My Folder\Downloads\FCIV\fciv.exe" -v -xml "C:\Users\My Folder\Downloads\MyHash.xml" -sha1 > "C:\Users\My Folder\Documents\MyText.txt"
可以使用此 大于语法将屏幕输出重定向到任何上述示例中的文本文件。当以这种方式管道输出时,屏幕上没有任何提示;只有闪烁的游标的返回表示已完成。
对于 Windows 8.1 及更高版本,内置的 Powershell 应用程序可以生成单个文件的十六进制哈希值,并支持 MD5、SHA1、SHA256、SHA384 和 SHA512 哈希算法。虽然只会在屏幕上显示结果,但输出也可以重定向到剪贴板。当需要 MD5 或 SHA1 以外的其他输出时,用户可能会发现它很有用。下面提供了两个命令行示例,第一个用于屏幕显示,第二个用于剪贴板。与 cmd 一样,拖放文件路径是最常用的方法,因为路径总是完全表达的。
c:\> get-filehash "C:\Users\My Folder\Documents\512MB.zip" -algorithm sha512 |FL
FL 后缀确保打印所有字符,而不是为了适应表格布局而缩短它们。
c:\> get-filehash "C:\Users\My Folder\Documents\512MB.zip" -algorithm sha256 |FL |clip
除了 FL 后缀之外,clip 后缀还会将完整输出发送到剪贴板。如果省略 FL 后缀,剪贴板输出将生成,但它将包含在屏幕上显示时可能应用的任何文本缩短。
- FCIV 下载和说明 : 由 Microsoft 提供
- MS-DOS 和 Windows 命令行技巧 : 由 ComputerHope 提供
- 命令提示符:常见问题解答 : 由 Microsoft 提供
- 命令提示符 : 由 PCSupport 提供
- VBA 中的文件夹哈希 : 另一个辅助页面,用于创建递归文件夹哈希列表和日志。使用最新的哈希算法,但仅限于大小不超过 200MB 的文件。