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-256 | 256 bit | 64 文字 | 現代の Web 標準 (TLS/SSL証明書、Bitcoin、HMAC、API署名) |
| SHA-384 | 384 bit | 96 文字 | 高度なセキュリティ要件(NSA Suite B 等) |
| SHA-512 | 512 bit | 128 文字 | 超高セキュリティ・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. 注意点(ハマりどころ)
- 文字列エンコーディングの差異
- UTF-8 エンコーディング(
TextEncoder)以外で文字列をバイト列化すると、異なるハッシュ値が算出されます。他言語(Java / C#)と通信比較する際は UTF-8 統一を確認してください。
- UTF-8 エンコーディング(
- パスワード保存への単体適用禁止
- 単なる SHA-256 は rainbow table (事前計算テーブル) 攻撃に脆弱です。必ず Salt(塩)とストレッチングを伴う認証ライブラリを使用してください。