SHA-256の値が同じなら、2つのファイルのバイト列は同じと考えてよい
SHA-256は、どれほど大きなファイルでも256ビット(32バイト)の要約値1つに縮めるハッシュ関数です。画面には通常、16進数64桁で表示します。同じバイト列を入れれば、いつどこで計算しても同じ値になり、1バイト変わっただけで64桁のほとんどがまったく別の値に変わります。そのため、配布元が示すSHA-256の値と手元のファイルの値が一致すれば、ダウンロード中にファイルが壊れたり、別のファイルに置き換わったりしていないと判断できます。
このツールは、上のA欄にファイルや文字を入れるとすぐにSHA-256を計算し、B欄に貼り付けた基準値と64桁を8桁ずつ並べて照合します。ファイルは4 MiBずつに分けてブラウザ内で読むので、サイズの制限はなく、数GBのインストールイメージでも進捗を見ながら計算できます。ファイルの内容や計算結果はサーバーに送信しません。
基準値の欄には、64桁の値1つだけでなく、SHA256SUMSのようなチェックサム一覧をそのまま貼り付けても構いません。一覧から同じ値の行を探し、なければファイル名が同じ行と照合します。値が一致しないときは、よくある原因(末尾の改行、Windowsの改行、Unicodeの合成方式、別のハッシュアルゴリズムの値)を先に試して知らせます。
ハッシュ値を照合したい場面
ハッシュ値の照合は、「このファイルは元のファイルと同じか」を数秒で確かめる方法です。1バイトずつ比べるには元のファイルが手元に必要ですが、ハッシュ値なら64桁があれば足ります。次のような場面で特に役立ちます。
- OSのイメージやインストーラーをダウンロードした後: Linuxディストリビューションや開発ツールは、ダウンロードページにSHA-256の値やSHA256SUMSファイルを載せています。ミラーサーバーから取得した場合や、ダウンロードが途中で止まって再開した場合は、まず値を照合しておくと安全です。Ubuntuの公式案内でも、SHA256SUMSでイメージを確認し、その一覧の署名まで確認するよう説明しています。
- バックアップやコピーしたファイルが元と同じか調べるとき: 外付けディスク、NAS、クラウド同期で移したファイルは、名前とサイズが同じでも中身が壊れていることがあります。B欄を「別のファイル」に切り替えて元のファイルとコピーを入れると、2つの値を照合し、違えば最初に異なるバイトの位置まで調べます。
- ファイルをやり取りした後に同じファイルか確かめるとき: 送った人が自分の側で計算した64桁を伝えておけば、受け取った人はファイルを入れるだけで同じかどうか確認できます。一部のメッセージアプリやSNSは写真や動画を再圧縮して送るため、その場合は値が変わります。
- 開発や配布の作業で成果物を比べるとき: 同じソースから作ったビルドが本当に同じか、Webページのintegrity属性に入れる値が正しいか、APIドキュメントの例のハッシュ値が自分の実装と一致するかを確かめるときに使います。
- 文字を同じ方法で処理できたか確かめるとき: 署名やトークンを作る前の段階で、文字列のハッシュ値が他のプログラムと一致するか見るとき、原因は改行1バイトやUnicodeの合成方式の違いであることが多くあります。このツールは、そうした違いを切り替えながら一致する場合を探します。
使い方
- A欄でファイルを選ぶか、ドロップします。文字のハッシュ値を見たいときは文字に切り替えて入力します。ファイルは選んだ時点で、文字は入力するたびに計算します。
- B欄に配布元のSHA-256の値を貼り付けます。チェックサム一覧全体を貼り付けても、SHA256SUMSのような一覧ファイルを「一覧ファイルを開く」で読み込んでも構いません。2つのファイルを比べるときは、B欄を別のファイルに切り替えます。
- 判定の行に「一致しました」または「一致しません」と表示されます。下の照合ボードは、64桁を8桁ずつ8つの組に分け、上段に計算値、下段に基準値を置いて、異なる文字を強調します。
- 値が一致しないときは、下の原因の一覧を確認します。文字モードで末尾の改行などの違いによって基準値と一致する場合が見つかったら、「この方法で計算」を押すとその設定で計算し直せます。
- 計算値を使うときは、コピー形式(小文字、大文字、Base64)を選んで「Aの値をコピー」を押します。
自分で確かめられる例の値
下の値は、このツール、Node.jsのcrypto、macOSのsha256sumで同じ結果になることを確認したものです。画面では同じに見える文字でも、バイトが違えば値がまったく変わることがわかります。表の↵は改行(0A)、␍↵はWindowsの改行(0D 0A)です。
| 入力 | バイト | SHA-256 | 説明 |
|---|---|---|---|
(空の文字) | 0 | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 | 何も入っていない0バイトの入力です。空のファイルも同じ値になります。 |
abc | 3 | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad | NISTの例の文書にある最初の例です。 |
abc↵ | 4 | edeaaff3f1774ad2888673770c6d64097e391bc362d7d6fb34982ddf0efd18cb | 末尾に改行(0A)が1バイト加わっています。 |
hello | 5 | 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 | printf hello や echo -n hello の結果と同じです。 |
hello↵ | 6 | 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03 | echo hello | sha256sum の結果と同じです。 |
hello␍↵ | 7 | cd2eca3535741f27a8ae40c31b0c41d4057a7a7b912b33b9aed86485d1c84676 | Windowsの改行(0D 0A)で終わる行です。 |
[BOM]hello | 8 | 7489ebbcc2a00056ddaaaac190bce473e5c03696ea1bd8ed83cf59a174283862 | 先頭にUTF-8 BOM(EF BB BF)が付いたファイルの内容です。 |
が | 3 | e3b21956ce958d2599e4e122f5395b8bb776552bd4ceae0c6bec80e4f73a2905 | 合成済み(NFC)の「が」1文字で、3バイトです。 |
が | 6 | f62b28f746dd75126c7aa8a11b16c2f6e18ecdfc6d62b8488b8e8637d3a2178d | 分解形(NFD)の「が」で、「か」と濁点の2文字、6バイトです。画面では上と同じに見えます。 |
最後の2行はどちらも同じ「が」です。macOSでは、ファイル名の濁点が分離した形(NFD)で保存されることがあり(濁点分離)、そのファイル名をコピーしてハッシュ値を作ると、Windowsで作った値と食い違う場合があります。文字モードの正規化ボタン(NFC、NFD)で、2つの方式を切り替えて計算してみてください。
基準値として貼り付けられる形式
ハッシュ値の書き方は配布元によって異なります。B欄は下の形式をすべて読み取り、1行に64桁の16進数があれば、その行のファイル名も一緒に読み取ります。複数行を貼り付けると、行ごとに別々に読み取って一覧として扱います。
| 形式 | 例 | 説明 |
|---|---|---|
| 64桁の16進数 | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad | 最も一般的な表記です。大文字と小文字は同じ値として扱います。 |
| 8桁ずつ区切った大文字 | BA7816BF 8F01CFEA 414140DE 5DAE2223 B00361A3 96177A9C B410FF61 F20015AD | NISTの例の文書のように、8桁の語に区切った値です。空白、コロン、ハイフンを除いて読み取ります。 |
| sha256sumの一覧 | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad abc.txt | 値、空白、モード文字(空白または*)、ファイル名の順です。SHA256SUMSファイルはこの形式です。 |
| BSD形式(--tag) | SHA256 (abc.txt) = ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad | sha256sum --tag や shasum --tag が出力する形式です。 |
| OpenSSL | SHA256(abc.txt)= ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad | openssl dgst -sha256 の出力です。OpenSSL 3ではSHA2-256と表示されます。 |
| PowerShellの表 | SHA256 BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD C:\Users\me\Downloads\abc.txt | Get-FileHash の出力行です。値は大文字で、パスからはファイル名だけを使います。 |
| Base64 | ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0= | 32バイトを44文字で表した値です。 |
| SRI(integrity) | sha256-ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0= | Webページのscript、linkタグにあるintegrity属性の表記です。 |
16進数の桁数が64桁でなければ、別のハッシュ値の可能性が高いです。32桁はMD5、40桁はSHA-1、56桁はSHA-224、96桁はSHA-384、128桁はSHA-512の長さです。このツールが計算するのはSHA-256だけなので、そうした値を入れると、どのアルゴリズムに見えるかと、お使いのパソコンでその値を計算するコマンドを案内します。
お使いのパソコンで同じ値を確かめるコマンド
ブラウザでの計算結果は、OSのコマンドでもう一度確認できます。下のコマンドの「ファイル名」の部分を実際のファイル名に置き換えてください。名前に空白がある場合は、二重引用符で囲みます。
| 環境 | コマンド | ポイント |
|---|---|---|
| Windows PowerShell | Get-FileHash ファイル名 | アルゴリズムを指定しなければSHA256で計算します。値は大文字で表示されます。 |
| Windowsのコマンドプロンプト | certutil -hashfile ファイル名 SHA256 | 末尾にアルゴリズム名のSHA256を必ず付けます。 |
| macOS | shasum -a 256 ファイル名 | shasumは-aを省くとSHA-1で計算するので、-a 256を付けます。 |
| Linux | sha256sum ファイル名 | 値、空白2つ、ファイル名の順に出力します。 |
| 一覧で検査 | sha256sum -c --ignore-missing SHA256SUMS | 一覧にあるファイルごとにOKまたはFAILEDを出力します。--ignore-missingは、ダウンロードしていないファイルを飛ばします。 |
文字のハッシュ値が合わないよくある理由
ファイルのハッシュ値はバイトをそのまま読むので迷うことは少ないですが、文字のハッシュ値は、画面に見えないバイトのせいで食い違うことがよくあります。ほとんどは次の5つのどれかです。
| 原因 | バイトの違い | このツールでの合わせ方 |
|---|---|---|
| echoの末尾の改行 | 0Aが1つ増える | 「末尾に改行を1つ」をオンにします。ターミナルでは、echo -nやprintfを使えば改行が付きません。 |
| Windowsの改行 | 行ごとに0Aではなく0D 0A | 改行をCRLFに切り替えます。ブラウザの入力欄は、改行をLFにして保持します。 |
| UTF-8 BOM | 先頭にEF BB BF | BOM付きのファイルは、ファイルモードで確認します。原因の一覧でBOMの違いが見つかれば知らせます。 |
| 濁点の合成方式 | 「が」が3バイト(NFC)または6バイト(NFD) | 正規化をNFCまたはNFDに切り替えます。初期値は入力のままです。 |
| 前後の空白 | 空白20、タブ09 | 入力欄で削除します。このツールは空白を自動では削除しません。 |
基準値があるときは、この5つとその組み合わせを順に切り替えて計算し、変更が少ない場合から一致するかを調べます。そのため、「末尾に改行を1つ加えると基準値と一致します」のように、原因をすぐに示せます。大文字と小文字が違う文字は別のバイトなので、切り替えて試すことはしません。
ランダムアートの読み方
64桁を1文字ずつ読んで比べるのは、思ったより間違えやすい作業です。そこでOpenSSHは、サーバー鍵のフィンガープリントを小さな図でも表示するVisualHostKeyという機能を備えており、このツールのランダムアートも同じ方式(drunken bishop)を使っています。
- 横17マス、縦9マスの盤の中央から出発します。
- 32バイトを先頭から読み、1バイトを下位のビットから2ビットずつ4回使って、1歩ずつ斜めに動きます。最初のビットが1なら右、0なら左、2つ目のビットが1なら下、0なら上です。盤の端に当たったら、その場にとどまります。
- 何度も通ったマスほど濃く塗ります。丸は出発点、ひし形は128歩を終えた到着点です。
2つの図がひと目で違っていれば、値も違います。ただし、図が似て見えるからといって、値が同じとは断定できません。判定は必ず64桁の照合で行い、図は目で素早く確かめるための補助として使います。
間違えやすいケース
- 一覧の別の行をコピーした: SHA256SUMSには、バージョン、OS、CPUごとのファイルが何行も並んでいます。1行だけコピーするより、一覧全体を貼り付けるほうが、このツールが同じ値や同じ名前の行を探してくれます。
- ダウンロードが終わっていないファイル: サイズが配布元の案内より小さい場合や、.crdownload、.partのような仮の名前の場合は、値が違って当然です。
- 名前の後ろに(1)が付いたファイル: 同じファイルを2回ダウンロードすると、ブラウザが名前に(1)を付けます。名前はハッシュ値に含まれないので、内容が同じなら値も同じです。このツールは、一覧から名前で探すとき、(1)と大文字小文字を無視します。
- 展開してから圧縮し直したファイル: 中のファイルが同じでも、圧縮方式や時刻の情報が変わるため、圧縮ファイルのハッシュ値は元のものと異なります。
- ファイルの内容を文字欄に貼り付けた: テキストファイルのハッシュ値を確認するとき、内容をコピーして貼り付けると、改行、BOM、文字コードが変わることがあります。ファイルのハッシュ値は、ファイルモードで確認します。
- 別のアルゴリズムの値と比べた: 同じページにMD5、SHA-1、SHA-512が並んでいるときは、先に桁数を見ます。SHA-256は64桁です。
限界と注意
- 値が一致するというのは、2つのバイト列が同じという意味です。ファイルが安全であることや、作成者が信頼できることを意味するわけではありません。
- ハッシュ値とファイルを同じサーバーから取得した場合、サーバーが侵入されたときは両方が書き換えられている可能性があります。そのためUbuntuなどの配布元は、SHA256SUMSファイルにGPG署名を付け、署名まで確認するよう案内しています。このツールは署名を確認しません。
- このツールはSHA-256だけを計算します。MD5とSHA-1では、意図的に同じハッシュ値を作る衝突が実際に作られており(SHA-1は2017年にGoogleとCWIが公開)、NISTはSHA-1を2030年末までに段階的に廃止すると発表しました。改ざんの確認には、SHA-256以上を使います。
- 計算速度は端末の処理能力によって異なり、毎秒数十〜数百MB程度です。数GBのファイルは時間がかかり、計算中にタブを閉じると止まります。スマートフォンでクラウド上にしかないファイルは、端末でダウンロードが終わってから読み込めるようになります。
- 文字モードは、UTF-8でのみバイトを作ります。Shift_JISやEUC-JPなど別の文字コードで保存された文字は、ファイルモードで確認します。
- ランダムアートは目で見るための補助であり、判定には使いません。
出典
確認日 NIST FIPS 180-4とSHA-256の例の文書、GNU coreutils、Microsoft、OpenSSHの解説書とソース、Ubuntuの案内は、2026年10月22日に原文で確認しました。例の表の値は、このツール、Node.js crypto、macOSのsha256sumで同じ結果になることを確認し、ランダムアートは同じ32バイトからssh-keygenが描く図と一致するか照合しました。
- 01NIST — FIPS 180-4 Secure Hash Standard (SHS)SHA-256の定義、2015年8月発行
- 02NIST — SHA-256の計算例(SHA256.pdf)abcと448ビットのメッセージの途中経過と結果、8桁の大文字の語による表記
- 03sha256sum(1) — GNU coreutilsのマニュアル出力行の形式、--tag、-c、--ignore-missing
- 04Microsoft Learn — Get-FileHash既定のアルゴリズムはSHA256、大文字の出力例
- 05Microsoft Learn — certutil-hashfile InFile [HashAlgorithm]、対応アルゴリズムの一覧
- 06Ubuntu — How to verify your Ubuntu downloadsha256sum -c SHA256SUMSとSHA256SUMS.gpgの署名確認
- 07OpenSSHのソース — sshkey.c fingerprint_randomart17 × 9の盤、1バイトにつき2ビットで4歩、出発点S、到着点E
- 08OpenBSDのマニュアル — ssh_config(5) VisualHostKey鍵のフィンガープリントを図でも表示する設定
- 09NIST — NIST Retires SHA-1 Cryptographic Algorithm2022年12月15日に発表、2030年12月31日までに廃止
- 10Google Security Blog — Announcing the first SHA1 collision2017年2月、GoogleとCWIアムステルダムが実際の衝突を公開
- 11W3C — Subresource Integrityintegrity属性のsha256-、sha384-に続くBase64表記
- 12Unicode — UAX #15 Unicode Normalization FormsNFCとNFDの正規化
よくある質問
ファイルを選ぶとサーバーにアップロードされますか?
いいえ。ファイルはこのブラウザ内で4 MiBずつ読んで計算し、ファイルの内容も計算した値もサーバーには送信しません。計算が終わると、画面の値だけが残ります。
数GBのISOファイルも確認できますか?
はい。ファイル全体を一度にメモリへ読み込まず、小さく分けて読むので、サイズの制限はありません。ただし端末の速度によって毎秒数十〜数百MBでの計算になるため、大きなファイルは時間がかかります。その間は進捗と残り時間を表示します。
値が一致すれば、そのファイルは安全ですか?
一致は、手元のファイルと基準値が指すファイルのバイトが同じという意味です。基準値が公式の配布元のものか、ファイル自体が安全かは別に確認する必要があります。配布元がチェックサム一覧に署名を提供している場合は、署名まで確認することをおすすめします。
大文字で書かれた値と比べても構いませんか?
はい。16進数の大文字と小文字は同じ値として扱います。8桁ごとに空白で区切った値やコロンで区切った値も、区切りを除いて64桁として読み取ります。
ターミナルで作ったハッシュ値と、文字のハッシュ値が違うのはなぜですか?
echoは末尾に改行を1バイト付けるため、echo helloとこのツールのhelloでは値が違います。基準値を貼り付けると、このツールが末尾の改行、Windowsの改行、Unicodeの合成方式の違いを切り替えながら、一致する場合を探して知らせます。
SHA256SUMSの一覧全体を貼り付けても構いませんか?
はい。複数行を貼り付けると、行ごとに値とファイル名を読み取り、手元のファイルと同じ値の行を探します。同じ値がなければ、名前が同じ行と照合して、どの行と違うかを示します。一覧ファイルをドロップするか、「一覧ファイルを開く」で読み込むこともできます。
40桁や128桁の値とは何ですか?
16進数40桁はSHA-1、128桁はSHA-512の値の長さです。このツールが計算するのはSHA-256だけなので、そうした値を入れると、どのアルゴリズムに見えるかと、Windows、macOS、Linuxでその値を計算するコマンドを案内します。
2つのファイルが同じか確かめるにはどうしますか?
B欄を「別のファイル」に切り替えて2つのファイルをそれぞれ入れると、2つのSHA-256の値を照合します。値が違うときは、サイズの違いと、最初に異なるバイトの位置も示します。