在 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