如何在 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 加密命名空间的一部分,为在 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 加密命名空间的一部分。该类提供使用 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 校验和的途径,每种途径适用于不同的场景和复杂程度。无论是使用内置 cmdlet,如 Get-FileHash,还是利用 .NET 类的强大功能,如 System.Security.Cryptography.MD5,或者使用加密提供者,如 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