如何在 PowerShell 中獲取 MD5 校驗和
- 在 PowerShell 中使用 MD5 散列算法
-
在 PowerShell 中使用
[System.Security.Cryptography.MD5]
類 -
在 PowerShell 中使用
MD5CryptoServiceProvider
類 - 結論

在確保 PowerShell 中數據完整性和安全性時,MD5 散列算法依然是一個有價值的工具,儘管在安全上下文中的相關性減弱。雖然由於存在漏洞不推薦用於加密目的,但 MD5 仍然對於驗證文件傳輸和檢測篡改非常有用。
利用 PowerShell 的能力,我們探索了計算 MD5 檢查和的各種方法,提供了基本和進階方法的見解。
在 PowerShell 中使用 MD5 散列算法
即使 MD5 不推薦用於安全目的,但它仍然是檢查文件傳輸是否被篡改或成功的絕佳解決方案。
首先,在傳輸之前和之後獲取文件的 MD5 指紋。
如果結果相同,則文件傳輸未被篡改。如果不相同,則文件已損壞。
為此,我們將使用 Get-FileHash
cmdlet。Get-FileHash
cmdlet 顯示文件的散列值。
默認情況下,它使用 SHA256
算法,但我們可以添加一個額外的參數來使用 MD5
。
Get-FileHash [-Path] <file> [[-Algorithm] <algo>] [Options]
-Algorithm
: 指定要使用的散列算法。在這種情況下,我們使用MD5
。-Path
: 指定要計算散列值的文件路徑。
我們也可以用流而不是文件路徑來使用它。
Get-FileHash [-InputStream] <stream> [[-Algorithm] <algo>] [Options]
-
[-InputStream] <stream>
: 指定用於散列計算的輸入流,默認為由-Path
指定的文件。 -
[[-Algorithm] <algo>]
: 指定要使用的散列算法(例如,MD5
、SHA1
)。 -
[Options]
: 附加設置,如-Path
、-LiteralPath
、-Force
等,用於自定義和錯誤處理。
這裡是一個例子:
Get-FileHash -Path "path\example.txt" -Algorithm MD5
在這段代碼中,我們利用 Get-FileHash
cmdlet 計算位於 "C:\Path\To\File.txt"
的文件的 MD5 檢查和。該 cmdlet 自動計算指定文件的 MD5 散列值。
輸出:
-Path
參數不是強制性的,因此我們不需要使用它。相反,我們給出文件路徑並添加算法參數以使用 MD5
而不是 SHA256
。
在 PowerShell 中使用腳本,我們可以創建一個變量來保存結果,然後用 $variable.Hash
來獲取散列值,以確保它與原始文件的值相同。
在 PowerShell 中對字符串進行散列
不幸的是,PowerShell 中沒有直接的函數或原生命令來從字符串生成散列。
但是,可以使用 Get-FileHash
搭配流參數,因此這是一個計算字符串散列的解決方案。
讓我們直接開始以下代碼片段:
$stringAsStream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stringAsStream)
$writer.write("MD5Online")
$writer.Flush()
$stringAsStream.Position = 0
Get-FileHash -InputStream $stringAsStream -Algorithm MD5
在這段代碼片段中,我們創建了一個 MemoryStream
對象 $stringAsStream
,並初始化了一個 StreamWriter $writer
將字符串 MD5Online
寫入流中。然後我們刷新寫入器以確保數據寫入流。
在將流的位置設回開頭後,我們利用 Get-FileHash
cmdlet,將 -InputStream
參數設為 $stringAsStream
,將 -Algorithm
參數設為 MD5
。該命令計算提供字符串的 MD5
檢查和。
輸出:
與本文的第一部分相比,唯一的改變是我們使用了 -InputStream
而不是 -Path
。
正如您在輸出中看到的,我們得到了字符串的 MD5
散列作為結果。
在 PowerShell 中使用 [System.Security.Cryptography.MD5]
類
[System.Security.Cryptography.MD5]
類提供計算數據的 MD5 散列值的功能。該類是 .NET Framework 的 Cryptography 命名空間的一部分,為在 PowerShell 腳本中生成 MD5 檢查和提供了一個強大而高效的解決方案。
[System.Security.Cryptography.MD5]
類提供了一個名為 ComputeHash()
的方法來計算 MD5 散列值。語法如下:
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$md5
: 代表使用Create()
方法創建的 MD5 類的實例。$hash
: 存儲計算出的 MD5 散列值。$data
: 指定需要計算 MD5 檢查和的數據。這可以是表示文件內容的字節數組或字符串。
這裡是一個例子:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = [System.Security.Cryptography.MD5]::Create()
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
在這段代碼片段中,我們使用 [System.Text.Encoding]::UTF8.GetBytes()
將字符串 MD5Example
轉換為字節數組。然後使用 [System.Security.Cryptography.MD5]::Create()
創建 MD5 類的實例,並調用 ComputeHash()
方法生成提供數據的 MD5 散列值。
最後,我們使用 [System.BitConverter]::ToString()
將散列值轉換為字符串格式,並使用 -replace
運算符去除輸出中的任何破折號。
輸出:
在 PowerShell 中使用 MD5CryptoServiceProvider
類
MD5CryptoServiceProvider
類是 .NET Framework 的 Cryptography 命名空間的一部分。該類提供使用 MD5 加密算法計算數據的 MD5 散列值的功能。
MD5CryptoServiceProvider
類提供了一個名為 ComputeHash()
的方法來計算 MD5 散列值。語法如下:
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$md5
: 代表使用New-Object
創建的MD5CryptoServiceProvider
類的實例。$hash
: 存儲計算出的 MD5 散列值。$data
: 指定需要計算 MD5 檢查和的數據。這可以是表示文件內容的字節數組或字符串。
這裡是一個例子:
$data = [System.Text.Encoding]::UTF8.GetBytes("MD5Example")
$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = $md5.ComputeHash($data)
$hashString = [System.BitConverter]::ToString($hash) -replace '-', ''
Write-Output $hashString
在這段代碼片段中,我們使用 [System.Text.Encoding]::UTF8.GetBytes()
將字符串 MD5Example
轉換為字節數組。然後使用 New-Object
創建 MD5CryptoServiceProvider
類的實例,並調用 ComputeHash()
方法生成提供數據的 MD5 散列值。
最後,我們使用 [System.BitConverter]::ToString()
將散列值轉換為字符串格式,並使用 -replace
運算符去除輸出中的任何破折號。
輸出:
結論
PowerShell 提供多種計算 MD5 檢查和的途徑,每種途徑適用於不同的場景和複雜程度。無論是使用內置的 cmdlets,如 Get-FileHash
,還是利用像 System.Security.Cryptography.MD5
的 .NET 類,或使用 MD5CryptoServiceProvider
這樣的加密提供者,PowerShell 用戶都有多樣的工具可供使用,以確保數據的完整性和安全性。
通過有效地理解和利用這些方法,PowerShell 腳本可以自信地處理需要 MD5 檢查和的任務,並且精確可靠。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn