如何在 PowerShell 中获取 MD5 校验和
- 在 PowerShell 中使用 MD5 哈希算法
-
在 PowerShell 中使用
[System.Security.Cryptography.MD5]
类 -
在 PowerShell 中使用
MD5CryptoServiceProvider
类 - 结论

在确保 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>]
:指定要使用的哈希算法(例如MD5
、SHA1
)。 -
[Options]
:其他设置,如-Path
、-LiteralPath
、-Force
等,用于自定义和错误处理。
这是一个示例:
Get-FileHash -Path "path\example.txt" -Algorithm MD5
在这段代码中,我们使用 Get-FileHash
cmdlet 计算位于 "C:\Path\To\File.txt"
的文件的 MD5 校验和。该 cmdlet 自动计算指定文件的 MD5 哈希值。
输出:
-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
校验和。
输出:
与本文第一部分相比,唯一的变化是我们使用了 -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 中使用 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 校验和的途径,每种途径适用于不同的场景和复杂程度。无论是使用内置 cmdlet,如 Get-FileHash
,还是利用 .NET 类的强大功能,如 System.Security.Cryptography.MD5
,或者使用加密提供者,如 MD5CryptoServiceProvider
,PowerShell 用户都可以使用多种工具来确保数据完整性和安全性。
通过有效理解和利用这些方法,PowerShell 脚本可以自信地精确可靠地处理需要 MD5 校验和的任务。
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn