ハッシュ生成器
MD5、SHA-1、SHA-256、SHA-384、SHA-512複数ハッシュアルゴリズム対応
ハッシュとは?
ハッシュ(Hash)は、任意長のデータを固定長のダイジェストにマッピングするアルゴリズムです。同じ入力は常に同じ出力を生成し、わずかな入力変化でも全く異なる出力になります。ハッシュ値から元のデータを逆算することはできません。代表的なハッシュアルゴリズムにはMD5、SHA-1、SHA-256、SHA-384、SHA-512などがあり、データ整合性検証、パスワード保存、デジタル署名などのシーンで広く使用されています。
使い方
使い方
- 入力モードを選択:テキスト入力またはファイルアップロード
- テキストを入力するか、ファイルをドラッグ&ドロップします
- 生成したいハッシュアルゴリズムをチェックします(複数選択可)
- 「ハッシュ生成」ボタンをクリックして計算します
- 「コピー」で個別のハッシュをコピー、または「すべてコピー」で全結果をコピーできます
ハッシュに関する注意点
- ハッシュ値は決定論的なフィンガープリントです。入力データの1バイトでも変更すると結果が変わります
- セキュリティが重要な場面ではSHA-256以上のアルゴリズムを推奨します。新しいセキュリティワークフローではMD5/SHA-1の使用は避けてください
利用シーン
仕組み
暗号学的ハッシュ関数は任意長の入力から固定長のダイジェストを生成し、3つのセキュリティ特性を持ちます。プリイメージ耐性(逆算が困難)、セカンドプリイメージ耐性(同じダイジェストを持つ異なる入力を見つけることが困難)、そして衝突耐性(同じダイジェストを持つ2つの入力を見つけることが困難)。MD5(Rivest 1991、RFC 1321)、SHA-1(NIST FIPS 180-1、1995)、SHA-2ファミリ(FIPS 180-4、2012)はすべてMerkle-Damgård構成です。入力はブロックサイズの倍数にパディングされ、一方向圧縮関数を介して反復処理されます。ブロックサイズはMD5、SHA-1、SHA-256で512ビット、SHA-512で1024ビットです。ダイジェストサイズはそれぞれ128 / 160 / 256 / 384 / 512ビットです。 MD5(Rivest 1991)は128ビットハッシュで、4つの32ビット連鎖ワード(A、B、C、D)による64ラウンドのクォーターラウンドで構成され、定数は正弦関数から導出されます(セキュリティ上の意味はなく、対称性を崩すだけ)。衝突攻撃:Wang et al. 2004がMD5の衝突探索を2⁴⁰のハッシュ評価に削減(手計算の差分パス)。Stevens 2009が選択プレフィックス衝突ツールを作成。Flameマルウェア2012が新しい選択プレフィックス攻撃を使用してMicrosoftコード署名証明書を偽造し、初の実世界でのMD5衝突エクスプロイトとして記録されました。現在、MD5の衝突はCPUで1ドル未満、GPUではミリ秒単位で生成可能です。新しいプロトコルにはSHA-256を使用してください。 SHA-1(FIPS 180-1、FIPS 180-4以降2011年にNISTが非推奨)は160ビットハッシュで、80ラウンドと5つの32ビット連鎖ワードを持ちます。SHAttered攻撃(Stevens et al.、2017年2月)が初の実用的なSHA-1衝突を生成し、約6,500CPU年と110GPU年のコストがかかりました。2020年までに選択プレフィックス衝突は約$45,000のGPU時間で実用的になり、2025年までにコモディティハードウェアでの衝突コストは$10,000を大幅に下回っています。Gitは2020年にSHA-1からSHA-256に移行し、HTTPS証明書は2017年以降SHA-1の使用が許可されていません。選択プレフィックス衝突のSHAttered出力('SHAttered.pdf'と'SHAttered2.pdf')は標準テストベクトルです。SHA-1ダイジェストは一致しますがコンテンツは異なります。 SHA-2(FIPS 180-4、2012)は6つのハッシュをカバーします。SHA-1の後継であるSHA-224、SHA-256、SHA-384、SHA-512に加え、2つの切り詰め変異体SHA-512/256とSHA-512/224があります。内部的にSHA-256は6つの論理関数(Ch、Maj、Σ0、Σ1、σ0、σ1)と64のラウンド定数K[t] = ⌊∛(t番目の素数の小数部の最初の32ビット)⌋を使用します。素数立方根構成は純粋に美的なもので、セキュリティ上の役割はありません。SHA-256は2010年頃から主力であり、TLS 1.3(RFC 8446)、Bitcoinのプルーフオブワーク(2025年の移行議論まで)、およびほとんどのコンテンツアドレッシングストレージの事実上の標準です。SHA-512/256は64ビットワードを使用しSHA-512の圧縮を実行してから切り詰めるため、64ビットハードウェアでより高速です。 SHA-3(FIPS 202、2014)とKeccak(元の提出)は根本的に異なる構造を使用します。1600ビット状態のKeccak-f[1600]スポンジ構成で、吸収/スクイーズフェーズを交互に行います。SHA-3はSHA-2と同じダイジェストサイズを持ちますが、Merkle-Damgårdハッシュに影響する長さ拡張攻撃に耐性があります。これは秘密プレフィックスMACのハッシュ化に有用な特性です。BLAKE2(RFC 7693)はソフトウェア上でSHA-256より高速で、WireGuard、Argon2、およびいくつかのモダンプロトコルで使用されています。 本ページでは、SubtleCrypto.digest(プラットフォームのネイティブコードを呼び出し。ChromiumではOpenSSL/BoringSSL、FirefoxではNSS、Safariでは同等のもの)を介してSHA-1、SHA-256、SHA-384、SHA-512をブラウザで実行し、SubtleCryptoがMD5を公開しないため(W3C Web Crypto APIによりMD5は「recommend-only」ステータス)、純粋JSのMD5実装にフォールバックします。10MBのファイルの場合、V8でのSHA-256は最新ノートPCで約400 MB/sで動作しますが、純粋JSのMD5は約100〜150 MB/sです。Web Crypto SHAファミリーは純粋JS実装より3〜4倍高速なため、SHA-1以上はネイティブインターフェースを経由させています。
- MD5(Rivest 1991、RFC 1321): 128ビットダイジェスト、512ビットブロック、64ラウンド、Merkle-Damgård。Wang 2004(2⁴⁰の計算量)以降衝突破壊済み、2012年のFlameで選択プレフィックス衝突も破壊済み。新しいコードでは使用不可だが、非セキュリティ用途のチェックサム、ETag、コンテンツフィンガープリント、キャッシュキーとしては引き続き有効。
- SHA-1(FIPS 180-1、1995。FIPS 180-4、2011で非推奨): 160ビットダイジェスト。SHAttered衝突(Stevens et al.、2017年2月)は約6,500CPU年のコスト。選択プレフィックス衝突は現在$10K未満。Gitは2020年にSHA-256に移行。CA/Browser Forumは2017年にHTTPS証明書でのSHA-1を禁止。
- SHA-256(FIPS 180-4): 256ビットダイジェスト、Ch/Maj/Σ0/Σ1/σ0/σ1の64ラウンド、素数の立方根の小数部から導出された64のラウンド定数K[t]。TLS 1.3(RFC 8446)、ほとんどのコンテンツアドレッシングストレージ、Bitcoinマイニングの主力。256ビットセキュリティレベルで約128ビットの衝突耐性。
- SHA-384/SHA-512(FIPS 180-4): SHA-512は64ビットワード、80ラウンド、1024ビットブロック。64ビットハードウェアでSHA-256の約1.5〜2倍高速。SHA-384はSHA-512を384ビットに切り詰めたもの。SHA-512/256はSHA-512を256ビットに切り詰め、SHA-256より優れた長さ拡張耐性を提供。
- SHA-3(FIPS 202、2014)/ Keccak: Keccak-f[1600]置換によるスポンジ構成、SHA3-256/384/512で1088/832/576ビットのレート。Merkle-Damgårdハッシュに影響する長さ拡張攻撃に耐性 -- 秘密プレフィックスMACに有用。
- BLAKE2(RFC 7693)とBLAKE3はモダンな高速ハッシュ。BLAKE2sはMAC鍵導出に一般的、BLAKE2bはWireGuardや多くのプロトコルで使用、BLAKE3は並列ハッシュ化用のMerkleツリーを追加。2025年時点でWeb Cryptoには未対応のため、本ページでは提供されません。
- Web Crypto API(W3C): SubtleCrypto.digest('SHA-256', data)はプラットフォームのネイティブコードで計算されたPromise<ArrayBuffer>を返却。V8でSHA-256は約400 MB/s、純粋JSのMD5は約100-150 MB/s。この3〜4倍の差が、SHA-1以上をSubtleCrypto経由で処理する理由。
- 長さ拡張の注意: H(secret || message)は攻撃者がダイジェストとメッセージ長を知っている場合、すべてのMerkle-Damgårdハッシュ(MD5、SHA-1、SHA-2)で偽造可能。HMAC(RFC 2104)とSHA-3はこれを回避。MACにはHMAC-SHA-256またはKMACを使用。信頼できない入力のハッシュには生のダイジェストで問題なし。
使用例
FIPS 180-2 テストベクター: 空文字列と 'abc'
入力: '' (空, 0 バイト)
MD5: d41d8cd98f00b204e9800998ecf8427e (32 桁の16進数)
SHA-1: da39a3ee5e6b4b0d3255bfef95601890afd80709 (40 桁の16進数)
SHA-256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 (64 桁の16進数)
SHA-512: cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
入力: 'abc' (3 バイト, FIPS 標準テストベクター)
MD5: 900150983cd24fb0d6963f7d28e17f72
SHA-1: a9993e364706816aba3e25717850c26c9cd0d89d
SHA-256: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
SHA-512: ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f
出力長は入力長に関係なくアルゴリズムにより固定 (MD5 128 bit, SHA-1 160 bit,
SHA-256 256 bit, SHA-512 512 bit)。FIPS 180-2 56バイトテストベクター (マルチブロック)
入力: 'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq' (56 バイト)
SHA-256: 248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1
SHA-512: 8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018
50d1c9ef3504cabb287a00833cf81a7e (128 桁の16進数 - 先頭64文字のみ表示
ダイジェストは 64 バイト / 1024 bit)
この 56 バイトのベクターは SHA-256 の 512 bit ブロックを2つにまたぎ、
メッセージスケジュール (ワード 16..63 の sigma_0 / sigma_1 拡張) を検証する。
NIST CAVP の SHA-256 リファレンス入力であり、メッセージスケジュールループの
実装が正しいかを確認する標準的な手段。これが一致すればブロックパディング、
長さの追記、最終状態の加算がすべて正しく動作している。SHA-512 は同じ
Merkle-Damgard 構造を 64 bit ワードと 80 ステップのスケジュールで適用するため、
同じ 56 バイト入力からは 128 桁の16進数ダイジェストが得られる。雪崩効果とエンコーディングの落とし穴
入力: '' (空) MD5: d41d8cd98f00b204e9800998ecf8427e
入力: 'a' (1 バイト) MD5: 0cc175b9c0f1b6a831c399e269772661
1 バイト追加するだけで出力の全ビットが変化する。これが雪崩効果である。
大文字小文字 (a -> A は 0x61 から 0x41 となり、0x20 ビット位置が変化)
や末尾の空白文字でも同様。さらに、見た目が同じ文字列でも末尾に '\n' があるか
UTF-8 BOM (0xEF 0xBB 0xBF) があるかで異なるダイジェストになる。
公開されているチェックサムと一致させるには、見た目の文字ではなく
正確なバイト列を一致させる必要がある。ブラウザや Node では文字列を
まず TextEncoder に通して入力バイトを確定する。文字列を直接受け取る
JS の MD5 実装は、非 ASCII 入力に対して誤ったハッシュを返す。sha256sum によるファイル整合性検証
$ sha256sum ubuntu-24.04-desktop-amd64.iso
4d0c238817f7d74c93cfbe7939f8f7a4f9a0d0c7c0e8a6c4f9a0d0c7c0e8a6c4 *ubuntu-24.04-desktop-amd64.iso
1. 同じ .iso ファイルをこのページのファイルモードにドロップし、SHA-256 を選択。
2. 64 文字のダイジェストを比較フィールドにコピー。
3. ダイジェストが一致すれば、ダウンロードしたファイルは配布元とバイト単位で同一。
一致しない場合は、ファイルが破損している、ダウンロードが不完全、
またはマニフェストとは異なるバージョンであることを意味する。
同じファイルでも、MD5 と SHA-1 はそれぞれ 32 文字と 40 文字のダイジェストを生成し、
SHA-256 と SHA-512 は 64 文字と 128 文字。比較する前に配布元のチェックサムが
同じアルゴリズムを使っていることを必ず確認する。よくある質問
このツールはどのアルゴリズムをサポートしていますか?
通常は MD5、SHA-1、SHA-256、SHA-384、SHA-512、場合によっては SHA-3 / RIPEMD-160 です。SHA-256 は現代の標準的な選択肢です。MD5 と SHA-1 はセキュリティ以外のチェックサム用途のみに使用してください。
ハッシュは暗号化と同じですか?
いいえ。ハッシュは一方向で、ハッシュ値から元の入力を復元するアルゴリズムは存在しません(小さな入力空間に対する総当たりを除く)。暗号化は鍵があれば可逆です。指紋や整合性チェックにはハッシュを、機密性には暗号化を使用してください。
入力はどこでハッシュ化されますか?
すべてのハッシュ計算は、Web Crypto API またはピュア JS 実装を介してブラウザ内で行われます。サーバーには何も送信されません。入力を貼り付けながらネットワークタブを確認することで検証できます。
同じ入力なのに別のサイトでハッシュが異なるのはなぜですか?
違いは通常、入力の前処理に起因します。改行コード(CRLF と LF)、末尾の空白、文字エンコーディング(UTF-8 と UTF-16)、または自動的に改行を追加するツールなどです。ハッシュアルゴリズム自体はどの実装でも決定的です。
ハッシュを逆算できますか?
数学的にはできません。実際的には、小さな集合からの短い入力(一般的なパスワード、辞書の単語、短い数字)は事前計算されたレインボーテーブルで検索できます。機密データに対しては、まさにこのためにソルトを付け、bcrypt や Argon2 のような遅いハッシュを使用します。このツールはそれらの代わりにはなりません。
このツールでパスワードをハッシュ化すべきですか?
いいえ。SHA-256 単独ではパスワード保管には速すぎます。ユーザーごとのソルトと調整されたワークファクターを使って、bcrypt、scrypt、または Argon2 を使用してください。SHA ファミリーのハッシュはファイル整合性、コンテンツアドレッシング、署名入力には適していますが、パスワードには適していません。
ハッシュ値の長さが異なるのはなぜですか?
各アルゴリズムには固定のダイジェストサイズがあります。MD5 は 128 ビット(32 桁の 16 進数)、SHA-1 は 160 ビット(40 桁)、SHA-256 は 256 ビット(64 桁)、SHA-512 は 512 ビット(128 桁)です。長いほど衝突耐性が高くなりますが、ハッシュ自体のストレージも多く必要になります。