ハッシュとは
ハッシュ(hash)は、どんな長さのデータでも決まった長さの値にまとめる計算です。同じ入力からは必ず同じ値が出ますが、入力が少しでも違えば値はまるごと変わります。出てきた値から元のデータを復元することはできません。
テキストの欄に hello と入れると、SHA-256は 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 になります。先頭を大文字に変えただけの Hello では 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 となり、先ほどの値とは似ても似つきません。だからこそ、ハッシュ値を2つ見比べるだけで、元のデータが同じかどうかを判断できます。このように照合のために使うハッシュ値を、チェックサムとも呼びます。
使い方
- 入力方法で「テキスト」か「ファイル」を選びます。テキストなら「ハッシュ化するテキスト」の欄に入力し、ファイルならドラッグ&ドロップするか選択します。ファイルの形式は問いません。
- 計算するアルゴリズムで、必要なものをオンにします。ボタンは押すたびにオンとオフが入れ替わり、いくつでも同時にオンにできます。すべてオフにすると「アルゴリズムを1つ以上選んでください。」と表示されます。
- 表示形式を「16進数(小文字)」「16進数(大文字)」「Base64」から選びます。
- ハッシュ結果に、オンにしたアルゴリズムの値が1行ずつ並びます。
- 照合したい値があるときは、予想されるハッシュ値と比較の欄に貼り付けます。
| アルゴリズム | ハッシュの長さ | 16進数の桁数 | 最初からオン |
|---|---|---|---|
| MD5 | 128ビット | 32 | はい |
| SHA-1 | 160ビット | 40 | はい |
| SHA-256 | 256ビット | 64 | はい |
| SHA-384 | 384ビット | 96 | はい |
| SHA-512 | 512ビット | 128 | はい |
| SHA3-256 | 256ビット | 64 | いいえ |
| BLAKE3 | 256ビット | 64 | いいえ |
SHA3-256は長さこそSHA-256と同じですが、SHA-2とは設計の異なるSHA-3系なので、同じ入力でも値は一致しません。BLAKE3は、米国国立標準技術研究所(NIST)の標準には含まれていないアルゴリズムです。表示形式をBase64にすると同じ値が短く書け、MD5は24文字、SHA-256は44文字になります。
ダウンロードしたファイルが配布元のものと同じか確かめる
配布ページには、「SHA-256: 3a7bd3e2…」といった形でハッシュ値が載っていることがあります。入力方法を「ファイル」に切り替えてダウンロードしたファイルを選び、載っていた値を「予想されるハッシュ値と比較」の欄に貼り付けてください。
- オンにしたアルゴリズムのどれかと同じ値なら、「SHA-256の値と一致します。」のように、どのアルゴリズムで合ったのかを示し、結果一覧のその行を強調します。貼り付けた値がどのアルゴリズムのものか、あらかじめ知っておく必要はありません。
- 同じ値が見つからなければ「計算した値と一致しません。」と出ます。その場合はファイルをダウンロードし直してください。
照合の際、16進数の大文字と小文字の違い、先頭の 0x、途中に入った空白・コロン(:)・ハイフン(-)は無視します。5D:41:40:2A:... のように2桁ずつ区切られた値も、そのまま貼り付けて構いません。Base64で書かれた値は、いま選んでいる表示形式に関係なく照合しますが、こちらは大文字と小文字まで完全に同じでなければ一致しません。
値が一致したときに言えるのは、手元のファイルが、配布者がハッシュを計算したときのファイルと同じだということです。配布ページに載っているハッシュ値のほうが書き換えられていた場合は、この方法では気づけません。
テキストのハッシュがほかのツールと合わないとき
テキストは、UTF-8のバイト列に直してから計算しています。目に見えない文字が1つあるだけでも値は変わるので、ほかのツールと結果が合わないときは、たいてい改行が原因です。
helloのSHA-256は2cf24dba...ですが、末尾に改行が1つ付いたhelloは5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03です。ターミナルでecho hello | sha256sumと打って出てくるのは、この後者の値です。echoが末尾に改行を足すためです。- 同じ文章でも、メモ帳で保存したファイルのハッシュと、文章を貼り付けて計算したハッシュが食い違うことがあります。ファイルの文字コードがUTF-8ではない場合や、改行の方式が違う場合は、バイト列が別物になるからです。ファイルのハッシュを知りたいときは、中身を貼り付けるのではなく、「ファイル」で選んでください。
大きなファイルの読み込み方
ファイルは一度にメモリへ載せず、16MiBずつ区切って読みながら計算を進めます。オンにしたアルゴリズムは同じ断片をまとめて受け取るので、アルゴリズムの数だけファイルを読み直すことはありません。計算中は「ハッシュを計算しています…」という進捗バーが出て、キャンセルすると「計算をキャンセルしました。」と表示されます。
ハッシュの計算には、WebAssemblyで作られたhash-wasmライブラリを使っています。
