确认两个文件是否完全相同:在 PowerShell 中使用 SHA-256

PowerShellカテゴリを表すパンダのイラスト PowerShell

关于本文
本文是通过利用生成式 AI 的自动化流程创建的。内容经过整理,参考了 Microsoft Learn 的 Get-FileHash 与 NIST 的 SHA-256 规范,并通过 TEMP 目录下的虚拟文件观察内容差异。

验证状态:📘 已确认 Microsoft 与 NIST 官方规范,Windows 实机未验证

即使文件名和大小相同,内容也未必相同。通过 PowerShell 的 Get-FileHash 计算 SHA-256 并比较两个摘要,即可在备份或复制后轻松确认内容。

首先尝试

仅在 TEMP 目录下创建虚拟文件。

$dir = Join-Path $env:TEMP 'papanda-hash-demo'
New-Item -ItemType Directory -Path $dir -Force | Out-Null

'PANDA-001' | Set-Content (Join-Path $dir 'a.txt') -NoNewline
'PANDA-001' | Set-Content (Join-Path $dir 'b.txt') -NoNewline

$hashA = Get-FileHash (Join-Path $dir 'a.txt') -Algorithm SHA256
$hashB = Get-FileHash (Join-Path $dir 'b.txt') -Algorithm SHA256

$hashA
$hashB
"Same = $($hashA.Hash -eq $hashB.Hash)"

期望观察到的要点是 Same = True

查看此处

SHA-256 根据文件内容计算出固定长度的摘要。因为输入的是字节序列而非文件名,所以相同的内容会产生相同的摘要。

flowchart LR
    A[File A] --> C[SHA-256]
    B[File B] --> D[SHA-256]
    C --> E{digest比較}
    D --> E
    E -->|同じ| F[内容一致を強く確認]
    E -->|違う| G[内容は異なる]

尝试修改一处

b.txt 仅修改末尾的一个字符。

'PANDA-002' | Set-Content (Join-Path $dir 'b.txt') -NoNewline

$hashB2 = Get-FileHash (Join-Path $dir 'b.txt') -Algorithm SHA256
"Same = $($hashA.Hash -eq $hashB2.Hash)"

这次变成了 False。可以观察到,即使只更改一个字符,摘要也会发生巨大变化。

哈希不是加密

SHA-256 并不是将文件保密的功能。它是一种从内容生成摘要的单向哈希函数。NIST 在安全哈希标准(Secure Hash Standard)中定义了 SHA-256。

由于哈希碰撞作为一个理论概念是存在的,因此不能断言“摘要相同则数学上绝对相同”。不过,在常规的文件完整性确认中,使用一致的 SHA-256 是一种非常强有力的确认方法。

与大小比较的区别

大小相同的文件,内容也可能不同。例如 ABCXYZ 的长度都是 3 个字符,但内容完全不同。

'ABC' | Set-Content (Join-Path $dir 'a.txt') -NoNewline
'XYZ' | Set-Content (Join-Path $dir 'b.txt') -NoNewline

Get-Item (Join-Path $dir '*.txt') | Select-Object Name, Length
Get-FileHash (Join-Path $dir '*.txt') -Algorithm SHA256

“大小相同”可用于快速的初步检查,但它不等同于“内容相同”。

如果在工作中应用

  • 确认复制到 NAS 的重要文件是否与原文件相同

  • 在备份还原后进行校验

  • 将从供应商处收到的分发文件与官方的 SHA-256 值进行核对

  • 当存在多个同名文件时,对它们的内容是否相同进行分类

在处理大量文件时,计算哈希需要读取时间,因此建议先确认文件数量和大小再执行。此外,获取“官方网站公布的哈希值”的途径本身是否可靠也很重要。

善后清理

仅删除虚拟文件。

Remove-Item -LiteralPath $dir -Recurse -Force

$dir请同时确认操作已被限制在自行指定的 TEMP 目录内。

官方信息与第一手资料

文档信息

文章??
确认两个文件是否完全相同:在 PowerShell 中使用 SHA-256
?布日期
更新日期
来源
https://papanda925.com/?p=15623&lang=zh

?可: ?于本站?有相??利的正文及原??表,除非?有?明,可依据 CC BY 4.0 使用。本文可能包含使用生成式AI?建或??的内容。若代??有?可声明,或?接的GitHub???定了?可,?代?以??可?准。引用内容、第三方?料、?片及商?不在本?可范?内。 使用政策

标题和URL已复制