SHA-256 / SHA-384 / SHA-512 ハッシュの生成と JS 実装コード

開発 セキュリティ JavaScript
結論:30秒で SHA ハッシュを計算する
  • SHA-256: 64 文字 (256 bit) / Web 標準・証明書・署名のデファクトスタンダード
  • SHA-512: 128 文字 (512 bit) / 高度セキュリティ要件向け
  • 計算コード: ブラウザ標準 crypto.subtle.digest('SHA-256', bytes)

1. SHA ハッシュ計算ツール

入力されたテキストに対する SHA-256 / SHA-384 / SHA-512 のハッシュ値をブラウザ内で即座に計算します(データは外部送信されません)。

🛡️ この場でハッシュ値を生成する

※ 入力時に自動で計算されます

SHA-256
SHA-384
SHA-512

2. SHA アルゴリズムの比較表

アルゴリズムハッシュ長 (ビット)16進数出力文字数安全性・主な用途
SHA-256256 bit64 文字現代の Web 標準 (TLS/SSL証明書、Bitcoin、HMAC、API署名)
SHA-384384 bit96 文字高度なセキュリティ要件(NSA Suite B 等)
SHA-512512 bit128 文字超高セキュリティ・64bit CPU で高速処理

3. JavaScript (Web Crypto API) でのハッシュ生成コード

モダンブラウザおよび Node.js 15+ では、標準の crypto.subtle.digest を利用して外部ライブラリなしで計算可能です。

async function sha256(message) {
  const msgUint8 = new TextEncoder().encode(message);
  const hashBuffer = await crypto.subtle.digest('SHA-256', msgUint8);
  const hashArray = Array.from(new Uint8Array(hashBuffer));
  const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
  return hashHex;
}

sha256("hello world").then(hash => console.log(hash));
// 出力: "b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9"

4. 注意点(ハマりどころ)

  1. 文字列エンコーディングの差異
    • UTF-8 エンコーディング(TextEncoder)以外で文字列をバイト列化すると、異なるハッシュ値が算出されます。他言語(Java / C#)と通信比較する際は UTF-8 統一を確認してください。
  2. パスワード保存への単体適用禁止
    • 単なる SHA-256 は rainbow table (事前計算テーブル) 攻撃に脆弱です。必ず Salt(塩)とストレッチングを伴う認証ライブラリを使用してください。