在 PowerShell 中獲取 MD5 校驗和

Marion Paul Kenneth Mendoza 2023年1月30日 2022年5月16日
  1. 在 PowerShell 中使用 MD5 雜湊演算法
  2. PowerShell 中的雜湊字串
在 PowerShell 中獲取 MD5 校驗和

MD5 是一種雜湊演算法,儘管存在較弱的安全問題,但仍被廣泛使用。我們可以使用它來加密字串或獲取檔案的指紋。

Windows PowerShell 提供了一個 cmdlet 來為檔案生成 MD5 雜湊。該 cmdlet 還可以通過開啟流並對其進行雜湊來獲取字串的 MD5 雜湊。

本文將瞭解雜湊演算法並在 PowerShell 中使用它。

在 PowerShell 中使用 MD5 雜湊演算法

即使出於安全考慮不推薦使用 MD5,它仍然是檢查檔案傳輸是否被篡改或成功的絕佳解決方案。

首先,獲取傳輸前後檔案的 MD5 指紋。

如果結果相同,則說明檔案傳輸未被篡改。如果不是,它已損壞。

為此,我們將使用 Get-FileHash cmdlet。Get-FileHash cmdlet 顯示檔案的雜湊值。

它預設使用 SHA256 演算法,但我們可以新增一個額外的引數來使用 MD5。

Get-FileHash [-Path] <file> [[-Algorithm] <algo>] [Options]

我們也可以將它與流而不是檔案路徑一起使用。

Get-FileHash [-InputStream] <stream> [[-Algorithm] <algo>] [Options]

這是一個例子:

Get-FileHash C:\Windows\explorer.exe -Algorithm MD5

輸出:

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
MD5             3F786F7D200D0530757B91C5C80BC049                                       C:\Windows\explorer.exe

-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

輸出:

Algorithm       Hash                                                                   
---------       ----                                                                   
MD5             D49019C7A78CDAAC54250AC56D0EDA8A
  • 首先使用 $stringAsStream 建立一個新流。
  • 然後使用 $writer 在流上寫入。
  • 最後,我們使用 Get-FileHash 對流內容進行雜湊處理。

與本文第一節相比,唯一的變化是我們使用了 -InputStream 而不是 -Path

正如你在輸出中看到的那樣,我們得到了字串的 MD5 雜湊值。

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