> 웹 프론트엔드 > JS 튜토리얼 > JavaScript의 암호화: 실용 가이드

JavaScript의 암호화: 실용 가이드

Patricia Arquette
풀어 주다: 2024-12-05 06:25:17
원래의
159명이 탐색했습니다.

Cryptography in JavaScript: A Practical Guide

암호화는 데이터를 지정된 수신자만 이해할 수 있는 형식으로 변환하여 보호합니다. 이는 비밀번호, 온라인 거래 및 민감한 통신을 보호하는 데 필수적입니다. 아래에서는 암호화, 해싱 및 JavaScript를 사용하여 구현하는 방법에 대해 알아봅니다.


암호화란 무엇입니까?

암호화는 읽을 수 있는 데이터(일반 텍스트)를 읽을 수 없는 형식(암호문)으로 변환합니다. 승인된 당사자만이 절차를 취소할 수 있습니다.

주요 개념:

  • 암호화: 일반 텍스트를 암호문으로 변환합니다.
  • 복호화: 키를 사용하여 암호문을 일반 텍스트로 되돌립니다.

암호화 유형

1. 대칭 암호화

암호화와 복호화에 동일한 키를 사용합니다. 키는 발신자와 수신자 간에 안전하게 공유되어야 합니다. AES는 데이터를 읽을 수 없는 형식으로 변환하여 데이터를 보호하는 널리 사용되는 유형의 대칭 암호화 알고리즘입니다. 비밀 키를 사용하고 128, 192 또는 256비트 키 길이를 지원하여 무단 액세스로부터 강력한 보호 기능을 제공합니다. AES는 다음과 같은 경우에 필수적입니다.

  • 인터넷 통신 보안: HTTPS와 같은 온라인 상호 작용을 보호합니다.
  • 민감한 데이터 보호: 저장 및 전송 시 기밀성을 보장합니다.
  • 파일 암호화: 개인 및 직업 정보를 안전하게 보호합니다.

AES의 핵심 요소

AES의 핵심 요소로는 초기화 벡터(IV)가 있습니다. 키는 당사자 간에 공유되는 비밀 값으로, 데이터 암호화 및 해독 방법을 결정하며 항상 기밀로 유지되어야 합니다. IV는 동일한 일반 텍스트가 다른 암호문으로 암호화되도록 키와 함께 사용되는 무작위 값으로, 패턴 인식을 방지하기 위해 무작위성을 추가합니다. IV는 공개될 수 있지만 동일한 키로 재사용해서는 안 됩니다. 이러한 요소를 통해 AES는 사이버 위협에 효과적으로 대응하여 데이터 보안의 초석이 됩니다.

예: AES(고급 암호화 표준)

AES는 무작위성을 추가하기 위해 공유 키와 초기화 벡터(IV)를 사용하여 데이터를 암호화합니다.

const crypto = require('crypto');

const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);

function encrypt(text) {
  const cipher = crypto.createCipheriv(algorithm, key, iv);
  let encrypted = cipher.update(text, 'utf8', 'hex');
  encrypted += cipher.final('hex');
  return { encrypted, iv: iv.toString('hex'), key: key.toString('hex') };
}

function decrypt(encrypted, ivHex, keyHex) {
  const decipher = crypto.createDecipheriv(algorithm, Buffer.from(keyHex, 'hex'), Buffer.from(ivHex, 'hex'));
  let decrypted = decipher.update(encrypted, 'hex', 'utf8');
  decrypted += decipher.final('utf8');
  return decrypted;
}

// Usage
const message = "Secret Message";
const encryptedData = encrypt(message);
console.log("Encrypted:", encryptedData);

const decryptedMessage = decrypt(encryptedData.encrypted, encryptedData.iv, encryptedData.key);
console.log("Decrypted:", decryptedMessage);

로그인 후 복사
로그인 후 복사
로그인 후 복사

2. 비대칭 암호화

안전한 암호화 시스템을 만들려면 비대칭 암호화가 해결책인 경우가 많습니다. 두 개의 키, 즉 암호화용 공개 키와 복호화용 개인 키를 사용합니다. 이 설정을 사용하면 단일 키를 공유하지 않고도 보안 통신이 가능합니다.

작동 방식

  1. 키 쌍 생성

    공개-개인 키 쌍이 생성됩니다. 공개 키는 공개적으로 공유되지만 개인 키는 기밀로 유지됩니다.

  2. 암호화

    수신자의 공개 키는 데이터를 암호화합니다. 오직 개인 키만이 이를 해독할 수 있어, 가로채더라도 데이터를 안전하게 유지할 수 있습니다.

  3. 복호화

    수신자는 개인 키를 사용하여 데이터를 해독합니다.

const crypto = require('crypto');

const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);

function encrypt(text) {
  const cipher = crypto.createCipheriv(algorithm, key, iv);
  let encrypted = cipher.update(text, 'utf8', 'hex');
  encrypted += cipher.final('hex');
  return { encrypted, iv: iv.toString('hex'), key: key.toString('hex') };
}

function decrypt(encrypted, ivHex, keyHex) {
  const decipher = crypto.createDecipheriv(algorithm, Buffer.from(keyHex, 'hex'), Buffer.from(ivHex, 'hex'));
  let decrypted = decipher.update(encrypted, 'hex', 'utf8');
  decrypted += decipher.final('utf8');
  return decrypted;
}

// Usage
const message = "Secret Message";
const encryptedData = encrypt(message);
console.log("Encrypted:", encryptedData);

const decryptedMessage = decrypt(encryptedData.encrypted, encryptedData.iv, encryptedData.key);
console.log("Decrypted:", decryptedMessage);

로그인 후 복사
로그인 후 복사
로그인 후 복사

암호화의 해싱

해싱은 데이터를 고정 길이의 되돌릴 수 없는 문자열(해시)로 변환합니다. 일반적으로 데이터 무결성을 확인하고 비밀번호를 안전하게 저장하는 데 사용됩니다.

인기 해싱 알고리즘:

  • SHA-256: 안전하고 널리 사용됩니다.
  • SHA-3: 보안이 강화된 최신 버전
  • MD5 및 SHA-1: 취약점으로 인해 더 이상 사용되지 않습니다.

Node.js에서 문자열 해싱의 예

const crypto = require('crypto');

// Generate keys
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048 });

const data = "Confidential Data";

// Encrypt
const encrypted = crypto.publicEncrypt(publicKey, Buffer.from(data));
console.log("Encrypted:", encrypted.toString('base64'));

// Decrypt
const decrypted = crypto.privateDecrypt(privateKey, encrypted);
console.log("Decrypted:", decrypted.toString());

로그인 후 복사
로그인 후 복사

암호화와 해싱

기능 암호화 해싱
Feature Encryption Hashing
Process Two-way (encrypt/decrypt) One-way
Purpose Data confidentiality Data integrity
Reversible Yes No
Example AES, RSA SHA-256, bcrypt
프로세스 양방향(암호화/복호화) 편도 목적 데이터 기밀 데이터 무결성 가역적 예 아니요 예 AES, RSA SHA-256, bcrypt

실제 예: 프로젝트의 비대칭 암호화

내 프로젝트 Whisper에서는 익명 채팅 메시지를 보호하기 위해 비대칭 암호화를 사용했습니다. 메시지는 수신자의 공개 키로 암호화되므로 수신자만 개인 키를 사용하여 메시지를 해독할 수 있습니다.

클라이언트 측 React 구현의 경우 암호화 및 복호화에 crypto-js를 사용했습니다.

const crypto = require('crypto');

const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);

function encrypt(text) {
  const cipher = crypto.createCipheriv(algorithm, key, iv);
  let encrypted = cipher.update(text, 'utf8', 'hex');
  encrypted += cipher.final('hex');
  return { encrypted, iv: iv.toString('hex'), key: key.toString('hex') };
}

function decrypt(encrypted, ivHex, keyHex) {
  const decipher = crypto.createDecipheriv(algorithm, Buffer.from(keyHex, 'hex'), Buffer.from(ivHex, 'hex'));
  let decrypted = decipher.update(encrypted, 'hex', 'utf8');
  decrypted += decipher.final('utf8');
  return decrypted;
}

// Usage
const message = "Secret Message";
const encryptedData = encrypt(message);
console.log("Encrypted:", encryptedData);

const decryptedMessage = decrypt(encryptedData.encrypted, encryptedData.iv, encryptedData.key);
console.log("Decrypted:", decryptedMessage);

로그인 후 복사
로그인 후 복사
로그인 후 복사

복호화에는 개인 키가 사용됩니다.

const crypto = require('crypto');

// Generate keys
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048 });

const data = "Confidential Data";

// Encrypt
const encrypted = crypto.publicEncrypt(publicKey, Buffer.from(data));
console.log("Encrypted:", encrypted.toString('base64'));

// Decrypt
const decrypted = crypto.privateDecrypt(privateKey, encrypted);
console.log("Decrypted:", decrypted.toString());

로그인 후 복사
로그인 후 복사

자세한 예를 보려면 Whisper의 코드를 살펴보세요.


결론

암호화는 애플리케이션의 데이터 보안을 강화합니다. 공유 키 시나리오에는 AES와 같은 대칭 암호화를 사용하고 공개-개인 키 시스템에는 비대칭 암호화를 사용합니다. 해싱은 특히 비밀번호의 경우 데이터 무결성을 보장합니다. 애플리케이션 요구 사항에 따라 올바른 암호화 접근 방식을 선택하세요.

더 많은 지식이 필요하십니까?

공유 키에 대해 자세히 알아보기
공개 키에 대해 자세히 알아보세요
SHA-256에 대해 자세히 알아보세요
SHA-3에 대해 자세히 알아보세요
MD5에 대해 자세히 알아보세요
SHA-1에 대해 자세히 알아보세요
대칭 암호화에 대해 자세히 알아보세요
AES에 대해 자세히 알아보세요

읽어주셔서 감사합니다. 이에 대한 여러분의 생각을 알려주세요. 더 보고 싶으시다면, 제가 실수했거나 놓친 부분이 있다고 생각하시면 주저하지 마시고 댓글을 남겨주세요

위 내용은 JavaScript의 암호화: 실용 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿