この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoft LearnのGet-FileHashとNISTのSHA-256仕様を確認し、TEMP配下のダミーファイルで内容差を観察する形に整理しています。検証ステータス:📘 Microsoft・NIST公式仕様確認済み・Windows実機未確認
ファイル名やサイズが同じでも、中身まで同じとは限りません。PowerShellの Get-FileHash でSHA-256を計算し、2つのdigestを比較すると、バックアップやコピー後の内容確認を簡単に行えます。
まず試す
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はファイル内容から固定長のdigestを計算します。ファイル名ではなくbyte列が入力なので、同じ内容なら同じdigestになります。
flowchart LR
A[File A] --> C[SHA-256]
B[File B] --> D[SHA-256]
C --> E{digest比較}
D --> E
E -->|同じ| F[内容一致を強く確認]
E -->|違う| G[内容は異なる]
1か所変えてみる
b.txt の末尾だけ1文字変えます。
'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 になります。1文字の変更でもdigestが大きく変わることを観察できます。
ハッシュは暗号化ではない
SHA-256はファイルを秘密にする機能ではありません。内容からdigestを作る一方向のhash functionです。NISTではSHA-256をSecure Hash Standardで定義しています。
hash collisionは理論上の概念として存在するため「同じdigestなら数学的に絶対同じ」とは言い切りません。ただし通常のファイルintegrity確認でSHA-256の一致を使うのは非常に強い確認方法です。
サイズ比較との違い
同じサイズのファイルでも内容は違えます。たとえば ABC と XYZ はどちらも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値と照合する
同名ファイルが複数あるとき、中身が同一か分類する
大量ファイルではhash計算に読み込み時間がかかるため、件数・サイズを確認してから実行します。また「公式サイト掲載のhash値」自体が信頼できる経路から得られているかも重要です。
後始末
ダミーファイルだけ削除します。
Remove-Item -LiteralPath $dir -Recurse -Force
$dir を自分で指定したTEMP配下に限定している点も確認してください。
