今日のデジタル時代では、API キー、パスワード、ユーザー データなどの機密情報の保護がこれまで以上に重要になっています。堅牢な暗号化および復号化戦略により、不正アクセスを防止し、データの機密性を確保できます。このブログ投稿では、最新の安全なアプローチとして Web Crypto API を活用し、バニラ JavaScript を使用してテキストを暗号化および復号化する方法を検討します。
暗号化は、読み取り可能なデータ (平文) を、正しいキーで復号化した場合にのみ読み取ることができるスクランブル形式 (暗号文) に変換します。これにより、たとえ誰かが暗号化されたデータを傍受したとしても、キーがなければデータは無意味なままになります。堅牢な暗号化メカニズムにより以下が保護されます:
JavaScript でこれを安全に実装する方法を詳しく見てみましょう。
暗号化と整合性検証の両方を提供する最新の標準である AES-GCM (Advanced Encryption Standard - Galois/Counter Mode) を使用します。手順には以下が含まれます:
これは完全な JavaScript 実装です。
データの保存と取得を簡単にするために、ArrayBuffer と 16 進数の間で変換します。
function arrayBufferToHex(buffer) { return [...new Uint8Array(buffer)] .map(byte => byte.toString(16).padStart(2, '0')) .join(''); } function hexToArrayBuffer(hex) { const bytes = new Uint8Array(hex.length / 2); for (let i = 0; i < hex.length; i += 2) { bytes[i / 2] = parseInt(hex.substr(i, 2), 16); } return bytes.buffer; }
PBKDF2 を使用して強力な暗号化キーを取得します:
async function getCryptoKey(password) { const encoder = new TextEncoder(); const keyMaterial = encoder.encode(password); return crypto.subtle.importKey( 'raw', keyMaterial, { name: 'PBKDF2' }, false, ['deriveKey'] ); } async function deriveKey(password, salt) { const keyMaterial = await getCryptoKey(password); return crypto.subtle.deriveKey( { name: 'PBKDF2', salt: salt, iterations: 100000, hash: 'SHA-256' }, keyMaterial, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt'] ); }
パスワードを使用してテキストを暗号化します:
async function encryptText(text, password) { const encoder = new TextEncoder(); const salt = crypto.getRandomValues(new Uint8Array(16)); const iv = crypto.getRandomValues(new Uint8Array(12)); const key = await deriveKey(password, salt); const encrypted = await crypto.subtle.encrypt( { name: 'AES-GCM', iv: iv }, key, encoder.encode(text) ); return { cipherText: arrayBufferToHex(encrypted), iv: arrayBufferToHex(iv), salt: arrayBufferToHex(salt) }; }
同じパスワードでテキストを復号化します:
async function decryptText(encryptedData, password) { const { cipherText, iv, salt } = encryptedData; const key = await deriveKey(password, hexToArrayBuffer(salt)); const decrypted = await crypto.subtle.decrypt( { name: 'AES-GCM', iv: hexToArrayBuffer(iv) }, key, hexToArrayBuffer(cipherText) ); const decoder = new TextDecoder(); return decoder.decode(decrypted); }
これらの関数の使用方法を見てみましょう:
function arrayBufferToHex(buffer) { return [...new Uint8Array(buffer)] .map(byte => byte.toString(16).padStart(2, '0')) .join(''); } function hexToArrayBuffer(hex) { const bytes = new Uint8Array(hex.length / 2); for (let i = 0; i < hex.length; i += 2) { bytes[i / 2] = parseInt(hex.substr(i, 2), 16); } return bytes.buffer; }
API キーなどの機密情報の暗号化は、アプリケーションを保護するための基本的な手順です。 私はこれを主に API キーに使用します。
以上がVanilla JavaScript による安全なテキストの暗号化と復号化の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。