CERTUTIL(ハッシュ値・Base64)

にメンテナンス済み

ソフトウェアのダウンロードページに「SHA-256: 3a7bd3e2…」のような文字列が載っていることがあります。これはハッシュ値と呼ばれ、ダウンロードしたファイルが破損や改ざんをされていないか確認するための値です。

Windows には、追加ソフトなしでハッシュ値を計算できる CERTUTIL コマンドが標準で用意されています。

ハッシュ値とは

ハッシュ値とは、ファイルの内容から計算される固定長の文字列です。ファイルが 1 バイトでも異なれば、まったく別の値になります。公開されているハッシュ値と手元のファイルのハッシュ値が一致すれば、同じファイルであると確認できます。

基本的な使い方

構文
CERTUTIL -hashfile ファイル名 [アルゴリズム]
SHA-256のハッシュ値を計算
certutil -hashfile setup.exe SHA256
- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>certutil -hashfile setup.exe SHA256
SHA256 hash of setup.exe:
3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b
CertUtil: -hashfile command completed successfully.
C:\users\user>

2 行目がハッシュ値です。メッセージの言語は OS の表示言語によって異なり、日本語環境では文言が変わりますが、2 行目がハッシュ値である点は同じです。

アルゴリズムを省略すると SHA1 になる

アルゴリズムを省略した場合は SHA1 で計算されます。配布元が SHA-256 を公開しているときは、必ず SHA256 を明示してください。

指定できるアルゴリズム

アルゴリズム説明
MD2、MD4128 ビット。非常に古く、使うべきではない
MD5128 ビット。古い形式で、改ざん対策には不向き
SHA1160 ビット。既定値。こちらも安全性は低い
SHA256256 ビット。現在もっとも広く使われている
SHA384384 ビット
SHA512512 ビット

MD5 や SHA1 は、同じハッシュ値を持つ別のファイルを意図的に作れることが知られています。そのため、意図しない破損の検出には使えても、悪意ある改ざんの確認には向きません。配布元が提供していれば SHA256 以上を使いましょう。

公開されたハッシュ値と比較する

ハッシュ値は長いため、目視で比べると見落としがちです。findstr に公開されている値を渡すと、一致するかを確実に判定できます。

ハッシュ値が一致するか確認
certutil -hashfile setup.exe SHA256 | findstr /I "3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b"

一致すれば該当行が表示され、一致しなければ何も表示されません。/I オプションで大文字・小文字の違いを無視しています。

チェック

CertUtil: -hashfile command completed successfully. の行は、ハッシュ値と無関係にどのファイルでも表示されます。ハッシュ値そのものを指定して検索することで、この行を拾う誤判定を避けられます。

バッチファイルで自動比較する

引数で受け取ったファイルと期待するハッシュ値を比較する例です。

verify_hash.cmd
@echo off
setlocal EnableDelayedExpansion

set "FILE=%~1"
set "EXPECTED=%~2"
set "ACTUAL="

for /f "skip=1 delims=" %%H in ('certutil -hashfile "%FILE%" SHA256') do (
    if not defined ACTUAL set "ACTUAL=%%H"
)

set "ACTUAL=!ACTUAL: =!"

if /I "!ACTUAL!"=="%EXPECTED%" (
    echo [OK] ハッシュ値が一致しました。
) else (
    echo [NG] ハッシュ値が一致しません。
    exit /b 1
)
endlocal
実行例
verify_hash.cmd setup.exe 3a7bd3e2360a3d29eea436fcfb7e44c735d117c42d1c1835420b6b9942dd4f1b

skip=1 で 1 行目の説明行を飛ばし、2 行目以降で最初に取得できた行(ハッシュ値)だけを変数に保存しています。古い Windows ではハッシュ値が 2 文字ごとにスペースで区切られて表示されるため、!ACTUAL: =! でスペースを取り除いています。

Base64 でエンコード・デコードする

CERTUTIL は、ファイルを Base64 形式の文字列に変換することもできます。

ファイルをBase64に変換
certutil -encode input.bin output.txt
Base64をファイルに戻す
certutil -decode output.txt restored.bin
出力ファイルの形式

-encode で作成されたファイルには、先頭に -----BEGIN CERTIFICATE-----、末尾に -----END CERTIFICATE----- の行が付きます。データが証明書でなくても付きます。-decode はこの行が付いたままでも正しく復元できます。Base64 だけが必要な場合は、これらの行を取り除いてください。

既存ファイルの上書きには -f が必要

出力先に同名のファイルがあると、エラーになり処理されません。上書きするには certutil -f -encode input.bin output.txt のように -f を付けます。-f を付けると確認なしで上書きされるため、重要なファイルを指定しないよう注意してください。

よくあるエラー

ファイルが見つからないときは、次のようなエラーになります。

- □ ×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>certutil -hashfile missing.exe SHA256
CertUtil: -hashfile command FAILED: 0x80070002 (WIN32: 2 ERROR_FILE_NOT_FOUND)
CertUtil: The system cannot find the file specified.
C:\users\user>
おすすめ書籍※ 広告を含む場合があります
中小企業経営者のためのRPA入門 RPA導入を成功させる方法

中小企業経営者のためのRPA入門 RPA導入を成功させる方法

60分でわかる! AIエージェント 超入門

60分でわかる! AIエージェント 超入門

コマンドラインの黒い画面が怖いんです。

コマンドラインの黒い画面が怖いんです。

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

知識・才能ゼロでもらく~に月10万円稼ぐ! よくわかるAI副業超入門

ファイル名にスペースが含まれる場合は "my file.exe" のようにダブルクォーテーションで囲んでください。

失敗したときは 0 以外の終了コードが返ります。ファイルが見つからない場合は -2147024894 のような負の値になるため、IF ERRORLEVEL 1 ではなく IF %ERRORLEVEL% NEQ 0 や || で判定してください。

まとめ

操作コマンド
SHA-256 を計算するcertutil -hashfile ファイル SHA256
MD5 を計算するcertutil -hashfile ファイル MD5
ファイルを Base64 にするcertutil -encode 入力 出力
Base64 をファイルに戻すcertutil -decode 入力 出力

関連記事

練習問題

練習問題

ファイル setup.exe の SHA-256 ハッシュ値を計算するコマンドとして正しいものはどれですか?

回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #CERTUTIL #ハッシュ値 #SHA-256 #Base64 #コマンド