Windows上でファイルのハッシュ値を求める方法3選

Windowsを使用しているとファイルのダウンロードの確認でハッシュ値を確認したいこともあります。

例えば、UbuntuのISOファイルなどはファイルサイズも大きいのでダウンロードの成功を見るためにも確認しておきたいところです。ダウンロードサイトにはSHA256SUMSというファイルがあり、ここにファイルのハッシュ値が格納されているので、この値と比較します。

SHA256SUMSのファイルの内容

a028574e7d2e2234828fbecc77b967c643ae23b24e5b5a69ad03d61a11e5caaa  ubuntu-ja-22.04-desktop-amd64.iso
2b7b23298a94abac97ca41397a5079acd82d8347c0e0b54ba3a162175d4fc063  ubuntu-ja-22.04-desktop-amd64.iso.torrent

Linuxであればmd5sumsha1sumなどのコマンドを使用すればハッシュ値の確認ができるのですが、Windowsではどうすればいいのかなと思い、その手法を改めて調べてみました。

Windows10以降ではWSL(Windows Subsystem for Linux)の使用も可能ですし、最近ではWSLの環境が拡充されていて、シームレスにWindowsからコマンドを呼び出すことも可能です。

目次

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ハッシュ値を求める

このコマンドレットはWindowsPowershellに含まれています。そのため、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を使用するとシームレスに実行ができるようになります。ただしWSLUbuntuなどのディストリビューションをインストールしている場合に限ります。

現在のWSLではファイルシステムも実行環境もWindows側(cmdPowershell)から呼び出す事ができるようになっています。そのため、Ubuntu 上にあるmd5sumコマンドやsha256sumコマンドを呼び出すことも可能です。

# WSLのコマンド呼び出し
> wsl 【WSLのディストリビューションでのコマンド】
#  wslのLinuxディストリビューション上にあるsha256sumコマンドの実行
> 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のパス WSL上のLinuxで認識されるパス
C:\ /mnt/c/

動作速度はかなり遅くなる(ファイルのアクセスが原因かもしれません)ようですが問題なく実行できています。

おわりに

Windows上でファイルのハッシュ値を求める方法3選ということで、今回はcertutil.exeGet-FileHash、そしてWSLを活用する方法の3つを紹介しました。

certutil.exeWindowsに標準で搭載されているため、追加のインストールが不要で、すぐに使用できる点が○。Get-FileHashPowerShellを高度なスクリプトの処理として活用しやすいでしょう。また、WSLを活用した方法では、Linuxコマンドに慣れていれば戸惑いなく使用することができると思います。

個人的には注意点が少ないcertutil.exeの使用が一番楽かもという印象です。とはいえ、LinuxのコマンドそのままにWSL経由での実行も悪くないかもしれません。

/* -----codeの行番号----- */