在 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