JavaScript/crypto
Window.crypto
は、ブラウザの window
オブジェクトが提供するプロパティで、暗号化関連の機能を提供する Crypto
オブジェクトを返します。Crypto
オブジェクトは、Web Cryptography API の一部であり、暗号化、復号、ハッシュ計算、乱数生成などの操作を行うためのメソッドやプロパティを提供します。
Window.crypto
の基本
Window.crypto
は、ブラウザ環境で利用可能なグローバルオブジェクト window
のプロパティです。以下のようにアクセスできます。
const crypto = window.crypto; // または単に crypto console.log(crypto); // Crypto オブジェクト
Crypto
オブジェクトの主な機能
Crypto
オブジェクトは、以下のような機能を提供します。
乱数生成
crypto.getRandomValues()
:- 暗号学的に安全な乱数を生成します。
- 例:
const array = new Uint8Array(10); crypto.getRandomValues(array); console.log(array); // ランダムなバイト列
暗号化と復号
crypto.subtle
:SubtleCrypto
オブジェクトを提供し、以下の操作を行います。- 暗号化と復号(AES、RSAなど)。
- デジタル署名と検証。
- ハッシュ計算(SHA-256など)。
- 鍵の生成と管理。
- 例(SHA-256ハッシュ計算):
const encoder = new TextEncoder(); const data = encoder.encode("Hello, World!"); crypto.subtle.digest("SHA-256", data).then(hash => { console.log(new Uint8Array(hash)); // SHA-256ハッシュ });
その他の機能
crypto.randomUUID()
:- ランダムなUUID(Universally Unique Identifier)を生成します。
- 例:
const uuid = crypto.randomUUID(); console.log(uuid); // 例: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
使用例
乱数生成
const array = new Uint32Array(5); crypto.getRandomValues(array); console.log(array); // ランダムな32ビット整数の配列
SHA-256ハッシュ計算
const encoder = new TextEncoder(); const data = encoder.encode("Hello, World!"); crypto.subtle.digest("SHA-256", data).then(hash => { const hashArray = Array.from(new Uint8Array(hash)); const hashHex = hashArray.map(b => b.toString(16).padStart(2, "0")).join(""); console.log(hashHex); // SHA-256ハッシュ(16進数) });
UUID生成
const uuid = crypto.randomUUID(); console.log(uuid); // 例: "f47ac10b-58cc-4372-a567-0e02b2c3d479"
対応ブラウザ
Window.crypto
は、以下のブラウザでサポートされています。
- Chrome
- Firefox
- Safari
- Edge
- Opera
注意点
- セキュリティ:
crypto.subtle
は、HTTPS接続でのみ利用可能です(ローカルホストやfile://
プロトコルを除く)。- これは、暗号化操作がセキュリティ上重要なためです。
- 非推奨の機能:
- 古いブラウザでは、
crypto.getRandomValues()
以外の機能がサポートされていない場合があります。
- 古いブラウザでは、
まとめ
Window.crypto
は、ブラウザで暗号化関連の操作を行うための強力なAPIです。主な機能は以下の通りです。
- 乱数生成:
crypto.getRandomValues()
- 暗号化と復号:
crypto.subtle
- UUID生成:
crypto.randomUUID()