오늘날의 디지털 시대에는 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 키에 이것을 사용합니다.
위 내용은 바닐라 JavaScript를 사용한 안전한 텍스트 암호화 및 복호화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!