ハッシュ生成ツールについて
この無料のハッシュ生成ツールは、任意のテキストの MD5、SHA-1、SHA-256、SHA-384、SHA-512 ハッシュを、入力に合わせてすべて同時にリアルタイムで計算します。
ハッシュは Web Crypto API を使ってお使いのブラウザー内で計算され、テキストがアップロードされることはありません。
ハッシュとは
ハッシュ関数は任意の長さの入力を受け取り、固定長のフィンガープリントを生成します。1文字を渡しても本1冊を渡しても、SHA-256 はどちらでも64文字の16進数を返します。
3つの性質がこれを有用にしています。
決定的であること。 同じ入力は常に同じハッシュを返します。いつでも、どのマシンでも、永久にです。
雪崩効果。 入力の1ビットを変えるだけで、出力の約半分のビットが反転します。hello と hellp のハッシュには目に見える関連がまったくありません。「近い」というものは存在せず、ハッシュは完全に一致するか、何も教えてくれないかのどちらかです。
一方向であること。 ハッシュから入力へ逆算することはできません。関数は意図的に情報を捨てており、逆関数は存在しません。
この最後の性質こそが本質であり、ハッシュが暗号化ではない理由です。
ハッシュ化は暗号化ではない
暗号化は双方向です。鍵があれば元に戻せます。それがまさに目的です。
ハッシュ化は設計上一方向です。鍵はなく、戻る道もありません。500ページの文書も1文字も、どちらも64文字になります — 情報のほとんどは単純に失われています。
したがって、ハッシュが答える問いは決して「これは何だったのか」ではなく、「これはあれと同じか」です。2つのハッシュを比べて、同一なら入力は同一、異なれば入力は異なっていた、ということです。
ここからよくある誤解が生じます。MD5 ハッシュを「復号する」ということは存在しません。検索サイトが実際に行っているのは、何十億もの一般的な入力をあらかじめハッシュ化しておき、あなたの値が表にあるかを調べることです。関数を逆にしているのではなく、見覚えのある値を認識しているだけです。珍しい入力は表にありません。
MD5 と SHA-1 は破られている — その意味
どちらもいまだにあちこちで使われていますが、どちらもセキュリティ用途には安全ではありません。どのように破られたのかを正確に知っておく価値があります。
衝突とは、異なる2つの入力が同じハッシュを生むことです。本来それは実現不可能であるべきです。MD5 では今や造作もないことで、普通のコンピューターで数秒あれば衝突を作れます。SHA-1 は2017年に陥落しました。Google が同じ SHA-1 ハッシュを持つ2つの異なる PDF を実演したのです。その後、攻撃の費用は下がる一方です。
なぜ重要か。ハッシュが一致する2つのファイルを作れるなら、ハッシュはもはやそのファイルが期待どおりのものである証拠になりません。署名済みの文書が、同じフィンガープリントを持つ別の文書とすり替えられる可能性があります。
MD5 がいまだに問題ない場面: 偶発的な破損の検出です。ダウンロードが無事に届いたか、ディスク上の2つのファイルが重複しているかを知りたいだけなら、MD5 は機能しますし高速です。ランダムな破損が衝突を生むことはありません。
問題がある場面: 誰かがあなたを欺こうとしている可能性のあるすべての場面 — ダウンロードの真正性の検証、署名、パスワードの保存です。
重要なものにはSHA-256 を使ってください。実用的な衝突攻撃は知られておらず、高速で、現代のシステムでの既定です。SHA-512 はほとんどの用途で意味のあるほど安全性が高いわけではありませんが、64ビットのハードウェアでは速い場合があります。
素のハッシュでパスワードを保存してはいけない
これはハッシュ関数の最も重大な誤用であり、実際の情報漏えいを招いています。
パスワードを SHA-256 でハッシュ化して結果を保存するだけでは不十分です。問題は高速なハッシュにあります。SHA-256 は速いように設計されており、現代のハードウェアは毎秒何十億回も計算します。データベースを盗んだ攻撃者は、ハッシュが一致するまであり得るパスワードを片端から試すだけです。
さらに2つの問題が事態を悪化させます。同じパスワードは同じハッシュになるため、どのアカウントが同じパスワードを使い回しているかが攻撃者に即座に分かります。そして事前計算済みの表により、ありふれたパスワードは何の労力もなく見抜かれます。
正しい方法は、遅くメモリを多く消費するように作られたパスワードハッシュ関数を使うことです。bcrypt、scrypt、Argon2 がそれにあたります。これらはパスワードごとに一意なランダムのソルトを加えるため、同じパスワードでも異なるハッシュになります。また意図的に高コストで、1回の検証に体感できるほどの時間(1秒の一定割合)がかかるよう調整されており、何十億回もの推測を非現実的にします。
適切なライブラリを使ってください。 パスワードの保存は、ハッシュの基本部品から自作するようなものではありません。
ハッシュが実際に役立つ場面
- ダウンロードの検証 — 公開されたチェックサムと受け取ったファイルを比較する
- 重複ファイルの検出 — ハッシュが同じなら内容も同じ
- 変更の検知 — このファイル、レコード、設定は変更されたか
- コンテンツアドレッシング — Git はすべてのコミットとオブジェクトをハッシュで名付ける
- データの完全性 — 転送やバックアップが壊れずに届いたことの確認
- キャッシュキー — 長い内容から導かれる短く安定した識別子
- デジタル署名 — 文書をハッシュ化し、そのハッシュに署名する
使い方
- テキストを入力または貼り付けます
- 各アルゴリズムのハッシュがリアルタイムで更新されます
- コピーボタンで任意のハッシュをコピーできます
知っておくとよいこと
- 出力の長さは固定です。 MD5 は16進32文字、SHA-1 は40文字、SHA-256 は64文字、SHA-512 は128文字 — 入力の大きさに関係なく同じです。
- すべてが影響します。 末尾の空白、ファイル末尾の改行、改行コードの違いだけでハッシュは完全に変わります。チェックサムが「一致するはず」なのに一致しない、よくある原因です。
- 文字エンコーディングが影響します。 このツールはテキストを UTF-8 としてハッシュ化します。同じ文字でも別のエンコーディングでハッシュ化すれば結果は異なります。
- 大文字・小文字は慣習であって意味ではありません。 ハッシュは大文字でも小文字でも表示されますが、値は同じです。大文字小文字を区別せずに比較してください。
- 空の入力にもハッシュはあります — 各アルゴリズムごとによく知られた定数です。
- 大きなファイルのハッシュ化は、OS 標準のツールで行うほうが適しています。Windows では certutil -hashfile、macOS と Linux では shasum -a 256 です。
よくある質問
ハッシュ化と暗号化の違いは何ですか?
暗号化は可逆で、正しい鍵があれば元のデータを復元できます。それが目的のすべてです。ハッシュ化は設計上一方向で、固定長のフィンガープリントを生成し、戻る道はありません。情報の大半が意図的に捨てられるからです。ハッシュ化が答えるのは「この2つは同一か」であって、「これは何だったのか」ではありません。
ハッシュは復号したり元に戻したりできますか?
できません。検索サイトが提供しているのは復元ではなく照合です。何十億もの一般的な文字列をあらかじめハッシュ化しておき、あなたの値が表に載っているかを調べているのです。ありふれたパスワードや辞書にある単語は即座に見つかりますが、珍しいものは表になく、これからも載りません。関数そのものを逆にすることはできません。
MD5 はまだ安全に使えますか?
偶発的な破損の検出に限ればそうです。ダウンロードが無事に届いたかの確認や、重複ファイルの発見などです。意図的な攻撃に対しては完全に破られており、同じ MD5 を持つ異なる2つのファイルを数秒で作れます。SHA-1 も破られており、2017年に衝突する PDF で実証されました。信頼が関わるものには SHA-256 を使ってください。
どのハッシュアルゴリズムを使うべきですか?
ほとんどの場合 SHA-256 です。高速で、広くサポートされており、実用的な衝突攻撃は知られていません。SHA-512 も妥当な選択肢で、64ビットのシステムでは速い場合がありますが、実際上意味のあるほど安全性が高いわけではありません。MD5 と SHA-1 は、既存システムとの互換性や、セキュリティに関わらない確認のために取っておいてください。
自分のウェブサイトのパスワードのハッシュ化に使えますか?
おやめください。SHA-256 のような高速なハッシュは適した道具ではありません。ハードウェアは毎秒何十億回も計算できるため、盗まれたデータベースはすぐに総当たりで破られます。パスワードごとに一意なソルトを加え、意図的に遅く作られた bcrypt、scrypt、Argon2 を使ってください。パスワードの保存を自作せず、必ず定評のあるライブラリを使ってください。
ウェブサイトに掲載されたハッシュと一致しないのはなぜですか?
ほぼ必ず、入力に目に見えない違いがあるためです。末尾の空白、末尾の改行の有無、Unix ではなく Windows の改行コードなどがあれば、ハッシュは完全に変わります — これは雪崩効果が正しく働いている証拠です。ページに複数の値が並んでいることもあるので、同じアルゴリズムどうしを比べているかも確認してください。
入力したテキストはサーバーに送信されますか?
いいえ。SHA 系のハッシュはブラウザー内蔵の Web Crypto 実装で計算され、MD5 は JavaScript で計算されます。いずれもすべてお使いの端末上で行われます。何も送信も保存もされず、接続を切った状態でもこのツールは動作します。
関連ツール
- ファイルチェックサム — 貼り付けたテキストではなく実際のファイルをハッシュ化
- パスワード生成 — きちんと保存する価値のある強力なパスワードを作成
- Base64 エンコード / デコード — ハッシュ化と違って可逆であるエンコード
- JWT デコーダー — これらのハッシュ関数の上に署名が作られているトークン