SHA-256ハッシュの仕組みと使いどころ:Web Crypto API実装例付き

ハッシュとは何か。SHA-256が使われる場面と、ブラウザネイティブのWeb Crypto APIによる実装例を紹介。

SHA-256ハッシュの仕組みと使いどころ

ハッシュ関数とは

ハッシュ関数は任意長の入力を固定長の出力(ダイジェスト)に変換します。SHA-256は256ビット(64桁の16進数)を出力します。

主な特性

  • 一方向性: ハッシュから元データを復元できない
  • 衝突耐性: 異なる入力が同じハッシュになる確率が極めて低い
  • 決定性: 同じ入力は常に同じハッシュを出力

使いどころ

  • パスワード保存: 平文ではなくハッシュ(+ソルト)を保存
  • ファイル整合性確認: ダウンロードファイルの改ざん検知
  • デジタル署名: 署名対象のダイジェスト生成
  • キャッシュキー: コンテンツのユニーク識別子

Web Crypto APIによる実装

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

const hash = await sha256('Hello, World!');
console.log(hash);
// dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986d

ファイルのハッシュ計算

async function fileHash(file) {
  const buffer = await file.arrayBuffer();
  const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);
  const hashArray = Array.from(new Uint8Array(hashBuffer));
  return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}

まとめ

SHA-256はWeb Crypto APIで追加ライブラリなしにブラウザ内で計算できます。サーバーにデータを送る必要がないため、プライバシーと速度の両面で優れています。