ハッシュ計算
ブラウザ標準の WebCrypto で SHA 系のダイジェストを計算します。ネットワーク不要で、内容が端末の外に出ることはありません。
ブラウザ標準の WebCrypto MD5 は非対応(現在は安全でないとされ、ブラウザベンダーがサポートを削除しました)。MD5 が必要な場合はサードパーティの実装を導入する必要がありますが、当サイトは「サードパーティコードゼロ」を掲げているためそうしていません。
使う場面
- API キー、ライセンス文、設定の断片など、テキストの SHA-256 指紋を、メールやリリースページで示されたチェックサムと 1 文字ずつ突き合わせたいとき。
- 同じ内容を HEX と Base64 の両方で渡す必要があるとき。片方のシステムは 16 進、別の API は Base64 を要求する、といった場合に 1 回の計算で両方得られます。
使わないほうがよい場面
- ダウンロードしたインストーラや画像、アーカイブを検証したいとき。ここで扱えるのはテキストエリア内の UTF-8 テキストだけで、バイナリファイルは読めません。shasum -a 256、certutil -hashfile、OS のチェックサム機能を使ってください。
- 相手が MD5 を指定しているとき(古い API 署名、一部の CDN の ETag、過去のチェックサム)。WebCrypto は MD5 を提供しておらず、本ツールでも計算できません。ローカルで md5sum や openssl dgst -md5 を実行してください。
ダイジェストはブラウザの WebCrypto がローカルで計算し、入力は送信も記録もされません。制限:SHA-1/256/384/512 のみで MD5 は非対応。入力は UTF-8 テキストとして扱うため、バイナリファイルや任意のバイト列は計算できず、ストリーミング処理もありません。SHA-1 は衝突耐性を失っています。HMAC やソルト付与には対応せず、Base64 は Base64URL ではなく標準の字母です。
よくある質問
なぜ MD5 がないのですか?
ブラウザが提供していないからです。WebCrypto の digest が対応するのは SHA-1/256/384/512 だけで、MD5 は標準に入ったことがありません。一部のブラウザが以前提供していた非標準の対応も、その後削除されています。JS で自前実装すると遅いうえ、正しさの責任をこちらが負うことになります。さらに MD5 は衝突を現実的に構成できるため、署名や完全性の確認に使うべきではありません。どうしても必要なときは、Web 上の代替を探すのではなく、ローカルで md5sum、md5、openssl dgst -md5 を実行してください。
ハッシュから元の文字列に戻せますか?
戻せません。ダイジェストは一方向で長さが固定されており、元の情報は失われています。可能なのは候補を総当たりして照合することだけです。ただし「戻せない」は「安全」と同じ意味ではありません。パスワード、推測しやすい秘密、電話番号のような列挙できる入力は、レインボーテーブルや辞書、GPU による総当たりでごく短時間に割られます。パスワード保存には bcrypt、scrypt、Argon2 のような、ソルト付きで意図的に遅いアルゴリズムを使ってください。SHA-256 をそのまま保存するのは、パスワード保存としては不十分です。
SHA-1 はまだ使えますか?
用途によります。衝突を実際に構成できることが示されており(SHAttered 以降)、署名、証明書、改ざん検知には使えません。Git のオブジェクト ID のような遺産的な用途は残っていますが、新しい設計では SHA-256 を選ぶべきです。本ツールが SHA-1 を残しているのは過去のチェックサムを照合するためで、推奨ではありません。鍵なしハッシュ共通の弱点として長さ拡張攻撃にも無防備なので、鍵が必要なら HMAC を使ってください。