如何在 PowerShell 中獲取 MD5 校驗和

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

在確保 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>]: 指定要使用的散列算法(例如,MD5SHA1)。

  • [Options]: 附加設置,如 -Path-LiteralPath-Force 等,用於自定義和錯誤處理。

這裡是一個例子:

Get-FileHash -Path "path\example.txt" -Algorithm MD5

在這段代碼中,我們利用 Get-FileHash cmdlet 計算位於 "C:\Path\To\File.txt" 的文件的 MD5 檢查和。該 cmdlet 自動計算指定文件的 MD5 散列值。

輸出:

在 PowerShell 中獲取 md5 校驗和 - 輸出 1

-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 檢查和。

輸出:

在 PowerShell 中獲取 MD5 檢查和 - 輸出 2

與本文的第一部分相比,唯一的改變是我們使用了 -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 中獲取 MD5 校驗和 - 輸出 3

在 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 校驗和 - 輸出 4

結論

PowerShell 提供多種計算 MD5 檢查和的途徑,每種途徑適用於不同的場景和複雜程度。無論是使用內置的 cmdlets,如 Get-FileHash,還是利用像 System.Security.Cryptography.MD5 的 .NET 類,或使用 MD5CryptoServiceProvider 這樣的加密提供者,PowerShell 用戶都有多樣的工具可供使用,以確保數據的完整性和安全性。

通過有效地理解和利用這些方法,PowerShell 腳本可以自信地處理需要 MD5 檢查和的任務,並且精確可靠。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn