ハッシュジェネレーター

任意のテキストの MD5、SHA-1、SHA-256、SHA-512 ハッシュを、Web Crypto API を使ってブラウザ内でリアルタイムに計算します。入力した内容はどこにも送信されません。

どれを使えばいい?

何のためにハッシュを計算するかによります。

SHA-256 はチェックサムや整合性確認における安全なデフォルトです。MD5 と SHA-1 はどちらも暗号学的に破られており(衝突の作成が現実的に可能)、転送中にファイルが壊れていないかの確認には使えますが、パスワード保存のようなセキュリティ上重要な用途には適していません。

パスワードには使えません

これらのアルゴリズムはいずれもパスワードの保存に使うべきではありません。意図的に高速に作られており、それはこの用途にとってまさに逆効果だからです。パスワードの保存には、bcrypt、scrypt、Argon2 のような、あえて低速に設計された専用アルゴリズムが必要です。

仕組み

SHA-1、SHA-256、SHA-512 はブラウザ組み込みの crypto.subtle.digest API で計算されます。テキストは TextEncoder で UTF-8 バイト列に変換され、ネイティブにダイジェストされ、結果は小文字の16進数としてフォーマットされます。MD5 だけは例外です。Web Crypto は(暗号学的に破られているため)意図的に MD5 を実装していないので、このツールは MD5 専用に RFC 1321 の小さな JavaScript 実装を同梱しています。4つとも入力のたびに再計算され、計算が終わるより速くタイプした場合は古い結果を破棄するガードが働きます。

ターミナルと突き合わせるときによくある落とし穴があります。このツールは入力したバイト列そのものをハッシュ化し、末尾に改行は付きません。echo "hello" | sha256sum は決して一致しません。echo は改行を付加するため、実際には "hello\n" をハッシュ化していることになるからです。代わりに printf '%s' "hello" | sha256sum を使えば、ダイジェストは正確に一致します。同じ落とし穴が、言語やツール間で「ハッシュが一致しない」問題の大半の原因になっています。

crypto.subtle はブラウザ内部で動作するため、ダイジェストの計算に何かをどこかへ送信する必要はありません。実際に確認できます。開発者ツールのネットワークタブを開き、入力欄にパスワードや API キーを入力してみてください。リクエストは一切発生せず、テキストはそのタブの中にとどまります。