crypto / hash

SHA ハッシュ生成

テキストのSHA-1・SHA-256・SHA-384・SHA-512ハッシュ値をブラウザ上で即座に計算します。 Web Crypto APIを使用し、入力内容はサーバーに送信されません。

アルゴリズム
256 bit64 chars
テキストを入力するとハッシュ値が表示されます

使い方

01
  1. アルゴリズムボタン(SHA-1 / SHA-256 / SHA-384 / SHA-512)でハッシュ関数を選択します
  2. テキストエリアにハッシュ化したいテキストを入力します
  3. リアルタイムでハッシュ値が16進数で表示されます
  4. 「コピー」ボタンでハッシュ値をクリップボードにコピーできます

実装コード

02

ブラウザ標準の crypto.subtle.digest のみで実装。外部ライブラリ不要でそのままコピーして利用できます。

export type HashAlgorithm = 'SHA-1' | 'SHA-256' | 'SHA-384' | 'SHA-512'

// Web Crypto API を使ったハッシュ計算(非同期)
export async function computeHash(
  input: string,
  algorithm: HashAlgorithm
): Promise<string> {
  const encoder = new TextEncoder()
  const data = encoder.encode(input)
  const hashBuffer = await crypto.subtle.digest(algorithm, data)
  const hashArray = Array.from(new Uint8Array(hashBuffer))
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('')
}

// 8文字ごとにスペースを挿入して可読性を向上
export function formatHash(hashHex: string): string {
  return hashHex.match(/.{1,8}/g)?.join(' ') ?? hashHex
}

よくある使用例・注意点

03
ファイルの整合性確認
ダウンロードしたファイルが改ざんされていないか確認するために、SHA-256ハッシュを比較します。配布元が公開するハッシュ値と一致すれば、ファイルは正常です。GitHubのリリースページでも sha256sum として掲載されることが多いです。
パスワードの保存(注意あり)
SHAはパスワード保存に適していません。SHA-256などは計算が高速なため、ブルートフォース攻撃に弱いです。パスワードの保存にはbcrypt・Argon2・scryptなど専用のKey Derivation Function(KDF)を使用してください。
データの一意識別子(チェックサム)
テキストやデータのSHA-256ハッシュは、内容が同じなら常に同じ値になります。キャッシュのキーや重複チェック、データの変更検知など、一意な識別子として活用できます。
アルゴリズムの選択基準
SHA-1は衝突攻撃が発見されており、セキュリティ用途には非推奨です。一般的なセキュリティ用途にはSHA-256を推奨します。SHA-384・SHA-512はより強力ですが、出力が長くなります。パフォーマンスよりセキュリティを重視する場合に選択してください。
Web Crypto APIの対応環境
このツールはブラウザ標準のWeb Crypto API(crypto.subtle)を使用しています。Chrome 37+、Firefox 34+、Safari 7+、Edge 12+で利用可能です。なお、crypto.subtleはセキュアコンテキスト(HTTPS または localhost)でのみ動作します。

関連ツール

04
UUID生成Base64エンコードURLエンコードHTMLエスケープ

ソースコード

05

このツールのソースコード(テストコードを含む)はGitHubで公開しています。 MITライセンスで自由に利用・改変できます。

GitHub でコードを見る →