Windowsを使用しているとファイルのダウンロードの確認でハッシュ値を確認したいこともあります。
例えば、UbuntuのISOファイルなどはファイルサイズも大きいのでダウンロードの成功を見るためにも確認しておきたいところです。ダウンロードサイトにはSHA256SUMSというファイルがあり、ここにファイルのハッシュ値が格納されているので、この値と比較します。
SHA256SUMSのファイルの内容
a028574e7d2e2234828fbecc77b967c643ae23b24e5b5a69ad03d61a11e5caaa ubuntu-ja-22.04-desktop-amd64.iso
2b7b23298a94abac97ca41397a5079acd82d8347c0e0b54ba3a162175d4fc063 ubuntu-ja-22.04-desktop-amd64.iso.torrent
Linuxであればmd5sum
やsha1sum
などのコマンドを使用すればハッシュ値の確認ができるのですが、Windowsではどうすればいいのかなと思い、その手法を改めて調べてみました。
Windows10以降ではWSL(Windows Subsystem for Linux)
の使用も可能ですし、最近ではWSLの環境が拡充されていて、シームレスにWindowsからコマンドを呼び出すことも可能です。
目次
Windows側でもハッシュ値を求めるプログラムがあり、Powershell
側のコマンドレットも存在します。
certutil.exe
でハッシュ値を求める
このプログラムはWindowsに含まれています。Windows Terminal
などを開いて以下のように実行します。実行はcmd
上でも、Powershell
上でも可能です。
> certutil -hashfile 【ハッシュ値を求めるファイル名】 【ハッシュ値算出のアルゴリズム】
使用例
PS> certutil.exe -hashfile .\ubuntu-ja-22.04-desktop-amd64.iso SHA256
SHA256 ハッシュ (対象 .\ubuntu-ja-22.04-desktop-amd64.iso):
a028574e7d2e2234828fbecc77b967c643ae23b24e5b5a69ad03d61a11e5caaa
CertUtil: -hashfile コマンドは正常に完了しました。
SHA256SUMのファイルの中の値と一致しています。
certutil.exe
のマニュアルは以下にあります。
learn.microsoft.com
Get-FileHash
でハッシュ値を求める
このコマンドレットはWindowsのPowershell
に含まれています。そのため、Powershell
上でのみ可能です。
PS> Get-FileHash 【ハッシュ値を求めるファイル名】 -Algorithm 【ハッシュ値算出のアルゴリズム】
使用例
PS> Get-FileHash .\ubuntu-ja-22.04-desktop-amd64.iso -Algorithm sha256
Algorithm Hash Path
--------- ---- ----
SHA256 A028574E7D2E2234828FBECC77B967C643AE23B24E5B5A69AD03D61A11E5CAAA C:\ubuntu-ja-22.04-desktop-am...
少し難があるのは出力が大文字の点でしょうか。以下のように実行すると出力結果を小文字にできます。
出力を小文字にする例
PS> Get-FileHash .\ubuntu-ja-22.04-desktop-amd64.iso -Algorithm sha256 | ForEach-Object { $_.Hash.ToLower() }
Get-FileHash
のマニュアルは以下にあります。
learn.microsoft.com
WSLを使用する
WSL
を使用するとシームレスに実行ができるようになります。ただしWSL
でUbuntuなどのディストリビューションをインストールしている場合に限ります。
現在のWSLではファイルシステムも実行環境もWindows側(cmd
、Powershell
)から呼び出す事ができるようになっています。そのため、Ubuntu 上にあるmd5sum
コマンドやsha256sum
コマンドを呼び出すことも可能です。
> wsl 【WSLのディストリビューションでのコマンド】
> wsl sha256sum 【WSLから参照されるファイルのパス】
実行すると以下の様になります。
使用例
PS> wsl sha256sum /mnt/c/ubuntu-ja-22.04-desktop-amd64.iso
a028574e7d2e2234828fbecc77b967c643ae23b24e5b5a69ad03d61a11e5caaa /mnt/c/ubuntu-ja-22.04-desktop-amd64.iso
こちらの注意点はファイルのパス指定がWSL
側から参照できるパスになる点です。例えばCドライブの直下においたファイルのパスは/mnt/c/
になります。また、パス補完機能なども働かないのでちょっと大変かもしれません。
動作速度はかなり遅くなる(ファイルのアクセスが原因かもしれません)ようですが問題なく実行できています。
おわりに
Windows上でファイルのハッシュ値を求める方法3選ということで、今回はcertutil.exe
、Get-FileHash
、そしてWSL
を活用する方法の3つを紹介しました。
certutil.exe
はWindowsに標準で搭載されているため、追加のインストールが不要で、すぐに使用できる点が○。Get-FileHash
はPowerShell
を高度なスクリプトの処理として活用しやすいでしょう。また、WSL
を活用した方法では、Linuxコマンドに慣れていれば戸惑いなく使用することができると思います。
個人的には注意点が少ないcertutil.exe
の使用が一番楽かもという印象です。とはいえ、LinuxのコマンドそのままにWSL
経由での実行も悪くないかもしれません。