Создание однонаправленного шифрования (шифрования, которое невозможно расшифровать без единственного ключа)

Finance

Участник
16 Апр 2026
3
0
0 ₽
Мы будем использовать алгоритм RSA для генерации пары ключей (публичный и приватный). Сообщения будут шифроваться с помощью публичного ключа, и только обладатель приватного ключа сможет их расшифровать.

Ниже приведен пример скрипта на Node.js, который реализует шифрование файлов с использованием асимметричного шифрования. Приватный ключ можно сохранить на сервере или разделить на несколько серверов для повышения безопасности.

Шаг 1: Установка необходимых пакетов​

Сначала установите необходимые пакеты:
Bash:
npm install node-rsa fs

Шаг 2: Создание скрипта для шифрования и дешифрования​

Создайте файл crypto.js и добавьте следующий код:
JavaScript:
const fs = require('fs');
const NodeRSA = require('node-rsa');

// Генерация пары ключей
function generateKeys() {
    const key = new NodeRSA({ b: 2048 });
    const publicKey = key.exportKey('public');
    const privateKey = key.exportKey('private');

    fs.writeFileSync('public.key', publicKey);
    fs.writeFileSync('private.key', privateKey);

    console.log('Ключи сгенерированы и сохранены в файлы public.key и private.key');
}

// Шифрование файла
function encryptFile(inputFile, outputFile) {
    const publicKey = fs.readFileSync('public.key', 'utf8');
    const key = new NodeRSA(publicKey);
    const data = fs.readFileSync(inputFile);
    const encrypted = key.encrypt(data, 'base64');

    fs.writeFileSync(outputFile, encrypted);
    console.log(`Файл ${inputFile} зашифрован и сохранен в ${outputFile}`);
}

// Дешифрование файла
function decryptFile(inputFile, outputFile) {
    const privateKey = fs.readFileSync('private.key', 'utf8');
    const key = new NodeRSA(privateKey);
    const data = fs.readFileSync(inputFile, 'utf8');
    const decrypted = key.decrypt(data, 'utf8');

    fs.writeFileSync(outputFile, decrypted);
    console.log(`Файл ${inputFile} расшифрован и сохранен в ${outputFile}`);
}

// Генерация ключей
generateKeys();

// Шифрование файла
encryptFile('input.txt', 'encrypted.txt');

// Дешифрование файла
decryptFile('encrypted.txt', 'decrypted.txt');

Объяснение​

  1. Генерация ключей: Функция generateKeys генерирует пару ключей (публичный и приватный) и сохраняет их в файлы public.key и private.key.
  2. Шифрование файла: Функция encryptFile считывает публичный ключ из файла, шифрует содержимое входного файла и сохраняет зашифрованные данные в выходной файл.
  3. Дешифрование файла: Функция decryptFile считывает приватный ключ из файла, дешифрует содержимое входного файла и сохраняет расшифрованные данные в выходной файл.

Этот скрипт демонстрирует, как можно реализовать однонаправленное шифрование с использованием асимметричного шифрования. Приватный ключ можно сохранить на сервере или разделить на несколько серверов для повышения безопасности.
 
Активность
Пока здесь никого нет