Yueseryueser.com

← ガイド一覧

SHA-256 ハッシュ計算:HEX と Base64 の出力、送信なしで計算

テキストを入力し、アルゴリズムを選んで「計算」を押すと、HEX と Base64 が一度に得られます。ダイジェストは WebCrypto によりブラウザ内で計算され、内容が送信されることはありません。MD5 はブラウザが提供しないため、このツールにもありません。

ツールを開く:Hash Generator

ハッシュが適している場面

リリースページやメールで公開された SHA-256 のチェックサムを照合するときです。内容をハッシュ化し、示された文字列と1文字ずつ比べて、両側が完全に一致することを確認します。

同じ内容を2つの形式で渡す必要があるときです。あるシステムは HEX を保存し、別の API は Base64 を受け取る場合、1回の計算で両方の列が得られ、手作業の変換が不要になります。

設定の断片、キャッシュキー、重複判定用の短い指紋がほしいときや、2つのテキストがバイト単位で同一かを確認したいときです。

失敗しないための手順

まず入力が完全に一致していることを確認してください。ダイジェストはバイト単位で敏感で、末尾の改行が1つ増える、空白が1つ欠ける、半角のコロンが全角になるだけで結果はまったく変わります。ファイルの内容を照合するときは、エディタが末尾に改行を自動で足していないか注意してください。

HEX と Base64 は同じバイト列の2つの表現で、別々のハッシュではありません。SHA-256 は256ビット、つまり32バイトで、HEX は64文字(ここでは小文字)、Base64 はパディングを含めて44文字になります。照合にはどちらか一方を使いますが、両側で同じ表現に揃え、大文字小文字とパディングの違いに注意してください。

アルゴリズムの選択について、SHA-1 は衝突を実際に構成できることが示されており(SHAttered 以降の研究)、署名、証明書、改ざん検知には使うべきではありません。ここに残しているのは過去のチェックサムを照合するためです。新しい設計では SHA-256 を選び、より長いダイジェストが必要なら SHA-384 か SHA-512 を使います。

MD5 がないのは、ブラウザが提供していないからです。WebCrypto の digest が対応するのは SHA-1/256/384/512 だけで、MD5 は標準に入ったことがなく、一部のブラウザにあった非標準の対応も後に削除されました。MD5 が必要な場合はコマンドラインの md5sum、md5、openssl dgst -md5 を使ってください。

ハッシュはパスワードハッシュではありません。裸の SHA-256 はソルトがなく高速なので、パスワードや電話番号のような列挙可能な入力は、レインボーテーブルや GPU による総当たりで短時間に復元されます。パスワードの保存には bcrypt、scrypt、Argon2 のようにソルト付きで意図的に遅いアルゴリズムを使ってください。

もう1点、裸のハッシュは長さ拡張攻撃に耐えません。鍵が関わる場合は hash(key + message) ではなく HMAC を使ってください。このツールは裸のダイジェストのみで、HMAC やソルトは提供しません。

代替手段と限界

ファイルのチェックサムは OS のツールを使ってください。macOS と Linux の shasum -a 256 や sha256sum、Windows の certutil -hashfile です。ファイルのバイト列を読むためエンコードや改行の影響を受けず、インストーラーの検証はこの方法が正解です。

HMAC が必要なら WebCrypto の importKey と sign(HMAC アルゴリズム)、またはコマンドラインの openssl dgst -sha256 -hmac を使います。パスワードハッシュには bcrypt、scrypt、Argon2 のライブラリを使ってください。

このツールは入力欄の UTF-8 テキストだけをダイジェスト化します。バイナリファイルは読めず、ストリーム処理もありません。アルゴリズムは SHA-1/256/384/512 のみで MD5 はなく、HMAC やソルトも行いません。

よくある質問

ハッシュは元に戻せますか?

戻せません。ダイジェストは一方向で長さが固定されており、元の情報は失われています。候補を総当たりして照合する以外に方法はありません。ただし「戻せない」は「安全」と同じではありません。パスワード、低エントロピーの口令、電話番号のように列挙できる入力は、レインボーテーブル、辞書、GPU による総当たりで短時間に復元されます。パスワードの保存には bcrypt、scrypt、Argon2 のようなソルト付きで意図的に遅いアルゴリズムを使ってください。裸の SHA-256 はパスワードハッシュではありません。

なぜ MD5 がないのですか?

ブラウザが提供していないからです。WebCrypto の digest が対応するのは SHA-1、SHA-256、SHA-384、SHA-512 だけで、MD5 は標準に入ったことがなく、一部のブラウザにあった非標準の対応も後に削除されました。JavaScript で自作すると遅いうえ、実装の正しさを自分で保証する必要があります。MD5 の衝突はすでに構成可能で、署名や完全性の確認にも使うべきではありません。レガシーなシステムが要求する場合は、ローカルの md5sum、md5、openssl dgst -md5 を使ってください。

SHA-1 はまだ使えますか?

用途によります。SHA-1 の衝突は実際に構成できることが示されており(SHAttered 以降の研究)、署名、証明書、改ざん検知には使うべきではありません。Git のオブジェクト ID のような遺産的な用途は今も動いていますが、新しい設計では SHA-256 を選んでください。このツールが SHA-1 を残しているのは過去のチェックサムを照合するためで、推奨ではありません。他の裸のハッシュと同様、長さ拡張攻撃には耐えないため、鍵が関わる場合は HMAC を使ってください。

関連ツール:Hash Generator