ハッシュ生成

テキストやファイルからMD5、SHA-1、SHA-256、SHA-384、SHA-512のハッシュ値を生成し、チェックサムを照合できます。ファイルが端末の外に出ることはありません。

ハッシュ値の生成とチェックサムの照合方法

  1. 入力をテキストのままにして入力または貼り付けるか、ファイルに切り替えて端末内のファイルを選びます。
  2. MD5、SHA-1、SHA-256、SHA-384、SHA-512の値が表にまとめて表示され、行ごとにコピーボタンがあります。貼り付け先が大文字の16進数を求めるなら大文字をオンにします。
  3. ダウンロードしたファイルを検証するには、配布元が公開しているチェックサムをチェックサムを照合の欄に貼り付けます。アルゴリズムを指定する必要はありません。一致する行が緑色になり、メッセージにアルゴリズム名が表示されます。大文字・小文字の違いと前後の空白は無視されます。

ファイルはサーバーに送られず、ブラウザ自身が読み込んでハッシュを計算します。そのため大きなインストーラーや機密文書を確認してもアップロードの時間はかからず、内容が外に出ることもありません。ただし大きなファイルは丸ごとメモリに読み込むため、数GBのディスクイメージはスマートフォンでは遅くなることがあります。

ハッシュとは

暗号学的ハッシュ関数は、単語ひとつでも契約書でも4GBの動画でも、どんな入力も決まった長さの「指紋」に変換します。同じ入力からは常に同じ値が得られ、少しでも変わればまったく違う値になり、ハッシュ値から元の入力を逆算する現実的な方法はありません。つまりハッシュは暗号化ではなく、鍵もなければ復号するものもありません。

アルゴリズム長さ16進数の文字数現在の位置づけ
MD5128ビット32セキュリティ用途では破られている。偶発的な破損の検出には十分
SHA-1160ビット40セキュリティ用途では破られている。古いツールやGitでまだ使われる
SHA-256256ビット64チェックサムや署名の現在の標準
SHA-384384ビット96SHA-2ファミリー、安全
SHA-512512ビット128SHA-2ファミリー、安全

公開されているチェックサムの長さでアルゴリズムがわかります。16進数32文字ならMD5、64文字ならSHA-256です。

計算例

  • hello → SHA-256 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824、MD5 5d41402abc4b2a76b9719d911017c592。
  • 先頭だけ大文字の Hello → SHA-256 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969。1文字違うだけで、まったく無関係な結果になります。
  • The quick brown fox jumps over the lazy dog → MD5 9e107d9d372bb6826bd81d3542a419d6。末尾にピリオドを付けると e4d909c290d0fb1ca068ffaddf22cbd0 になります。
  • 空の入力にもハッシュ値はあり、SHA-256は e3b0c442…b855 です。このページは入力するまで表を空欄にしますが、この値が自分のログやデータベースに現れたら、どこかで空文字列をハッシュしています。

コマンドラインの結果と一致しないとき

テキストは入力したとおりのUTF-8のバイト列としてハッシュされます。結果が違うのは、ほぼ必ず目に見えないバイトのせいです。

  • 末尾の改行。echo hello | sha256sum は hello の後の改行まで含めてハッシュし、5891b5b5…6be03 を出力します。このページと同じ値にするには printf %s hello か echo -n hello を使います。
  • 改行コード。Windowsで保存したファイルの改行はCR LFですが、ブラウザの入力欄に貼り付けたテキストはLFだけになります。ファイルを確認するときは中身をコピーせず、ファイルモードでファイルそのものをハッシュしてください。
  • 文字コード。café をUTF-8でエンコードするとMD5は 07117fe4a1ebd544965dc19573183da2 ですが、古いLatin-1では 961f50f6282239d09e48f812c1ca7276 になります。Shift_JISで保存した日本語のテキストも、同様にUTF-8とは別の値になります。

ファイルの結果は、Linuxの sha256sum ファイル、macOSの shasum -a 256 ファイル、Windows PowerShellの Get-FileHash ファイル(既定はSHA-256)と同じです。

MD5とSHA-1はセキュリティには使えません

安全なハッシュでは、同じ値になる異なる2つの入力(衝突)を見つけることが事実上不可能でなければなりません。MD5は2004年、SHA-1は2017年に実際の衝突が公表されており、攻撃者はチェックサムが同じ2つのファイルを用意できます。ダウンロードの途中切れのような偶発的な破損の検出にはまだ使えますが、誰かに改ざんされうるものにはSHA-256以上を使ってください。

これらの関数はどれも、パスワードの保存に使ってはいけません。高速に計算できるよう設計されているため、流出したパスワードハッシュの一覧は、一般的なグラフィックスカードで毎秒数十億通りの候補と照合されてしまいます。パスワードの保存には、Argon2id、scrypt、bcryptのような、低速でソルトを使う専用のアルゴリズムが必要です。そもそも強いパスワードが必要なら、パスワード生成をお試しください。

よくある質問

ハッシュは復号したり元に戻したりできますか?

できません。「MD5を復号」とうたうサイトは、よく使われる語をあらかじめハッシュした巨大な表から値を探しているだけです。hello なら見つかりますが、ランダムな20文字の文字列は見つかりません。

自分で配布するファイルのチェックサムにはどれを使うべきですか?

SHA-256です。どこでもサポートされ、貼り付けやすい長さで、実用的な攻撃は知られていません。値の横にアルゴリズム名も書いておきましょう。

チェックサムが一致すればファイルは安全ですか?

手元のファイルが、チェックサムの元になったファイルと1バイト残らず同じだということは証明されます。ただし攻撃者がWebサイト自体を乗っ取っていれば、ファイルとチェックサムを両方差し替えられます。別の信頼できる経路で得たチェックサムや、署名付きのリリースを優先してください。

「安全な(https)ページでのみ利用できます」と表示されるのはなぜですか?

SHAの各アルゴリズムはブラウザのWeb Crypto APIで計算しており、このAPIは安全な接続でしか動作しません。MD5はページ自身のコードで計算するため、その場合でも表示されます。