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で追加ライブラリなしにブラウザ内で計算できます。サーバーにデータを送る必要がないため、プライバシーと速度の両面で優れています。