檔案校驗和完整性驗證器 (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 的檔案。