在 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn