Криптография в TypeScript: шифрование и хеширование данных
В современной веб-разработке безопасность данных — критически важный аспект. TypeScript, как строго типизированная надстройка над JavaScript, предоставляет мощные инструменты для реализации криптографических операций. В этой статье мы рассмотрим основные алгоритмы шифрования и хеширования, доступные в TypeScript, и покажем, как их применять на практике.
Встроенный модуль crypto и библиотеки
Node.js предоставляет встроенный модуль crypto, который полностью совместим с TypeScript. Для браузерных приложений используется Web Crypto API. Для более сложных задач рекомендуется библиотека crypto-js, которая работает как в Node.js, так и в браузере.
Установка необходимых пакетов:
npm install crypto-js
npm install @types/crypto-js --save-dev
Симметричное шифрование AES
Алгоритм AES (Advanced Encryption Standard) — наиболее популярный симметричный шифр. Он использует один и тот же ключ для шифрования и расшифровки данных.
Пример реализации AES-256 в TypeScript:
import CryptoJS from 'crypto-js';
const SECRET_KEY = 'my-strong-secret-key-32chars';
function encryptAES(text: string): string {
const encrypted = CryptoJS.AES.encrypt(text, SECRET_KEY);
return encrypted.toString();
}
function decryptAES(ciphertext: string): string {
const decrypted = CryptoJS.AES.decrypt(ciphertext, SECRET_KEY);
return decrypted.toString(CryptoJS.enc.Utf8);
}
// Использование
const originalText = 'Секретные данные для защиты';
const encrypted = encryptAES(originalText);
console.log('Зашифровано:', encrypted);
const decrypted = decryptAES(encrypted);
console.log('Расшифровано:', decrypted);
Асимметричное шифрование RSA
RSA использует пару ключей: открытый (public) и закрытый (private). Открытым ключом шифруют данные, а закрытым — расшифровывают. Это идеально для безопасной передачи данных.
Пример с использованием Node.js crypto:
import * as crypto from 'crypto';
function generateRSAKeys(): { publicKey: string; privateKey: string } {
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
modulusLength: 2048,
publicKeyEncoding: { type: 'spki', format: 'pem' },
privateKeyEncoding: { type: 'pkcs8', format: 'pem' }
});
return { publicKey, privateKey };
}
function encryptRSA(plainText: string, publicKey: string): string {
const buffer = Buffer.from(plainText, 'utf-8');
const encrypted = crypto.publicEncrypt(publicKey, buffer);
return encrypted.toString('base64');
}
function decryptRSA(cipherText: string, privateKey: string): string {
const buffer = Buffer.from(cipherText, 'base64');
const decrypted = crypto.privateDecrypt(privateKey, buffer);
return decrypted.toString('utf-8');
}
// Пример использования
const keys = generateRSAKeys();
const message = 'Конфиденциальное сообщение';
const encryptedRSA = encryptRSA(message, keys.publicKey);
const decryptedRSA = decryptRSA(encryptedRSA, keys.privateKey);
console.log('Исходное:', message);
console.log('Расшифрованное:', decryptedRSA);
Хеширование данных
Хеширование — это одностороннее преобразование данных в строку фиксированной длины. В отличие от шифрования, хеш невозможно обратить. Основные применения:
- Хранение паролей — вместо пароля хранится его хеш
- Проверка целостности данных — сравнение хешей файлов
- Цифровые подписи — подтверждение авторства
SHA-256
Наиболее распространённый алгоритм семейства SHA-2:
import CryptoJS from 'crypto-js';
function hashSHA256(data: string): string {
return CryptoJS.SHA256(data).toString();
}
// Пример
const password = 'myPassword123';
const hashedPassword = hashSHA256(password);
console.log('Хеш SHA-256:', hashedPassword);
HMAC (Hash-based Message Authentication Code)
HMAC добавляет секретный ключ к хешированию, что защищает от подделки данных:
function createHMAC(data: string, secret: string): string {
return CryptoJS.HmacSHA256(data, secret).toString();
}
function verifyHMAC(data: string, secret: string, hmac: string): boolean {
const computedHmac = createHMAC(data, secret);
return computedHmac === hmac;
}
// Использование
const secretKey = 'super-secret-key';
const message = 'Важные данные';
const hmac = createHMAC(message, secretKey);
const isValid = verifyHMAC(message, secretKey, hmac);
console.log('HMAC:', hmac);
console.log('Валидность:', isValid); // true
Безопас
Также в библиотеке
Конфигурация приложений C++: библиотеки и инструменты для гибкой настройки
Работа с Apache Kafka в C++: библиотека librdkafka и практические примеры
reflect-metadata для TypeScript: полное руководство с примерами
gRPC Java для Java: полное руководство с примерами
SwiftyJSON для Swift: полное руководство с примерами