← Назад к вопросам

Что такое шифрование?

2.0 Middle🔥 191 комментариев
#SOLID и паттерны проектирования#Spring Boot и Spring Data

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Шифрование

Шифрование — это процесс преобразования исходных данных (открытого текста) в зашифрованный вид (шифртекст) с помощью специального алгоритма и ключа. Это критически важная технология для защиты конфиденциальной информации: паролей, платёжных данных, личной переписки и корпоративных секретов.

Основные концепции

Открытый текст — это исходные данные, которые нужно защитить.

Шифртекст — это зашифрованная информация, которая непригодна для прямого использования без расшифровки.

Ключ шифрования — это специальная строка данных или число, необходимое для шифрования и расшифровки. Сложность и длина ключа влияют на стойкость шифрования.

Алгоритм — это математическая процедура, которая определяет, как именно преобразуются данные при использовании ключа.

Типы шифрования

1. Симметричное шифрование

Использует один и тот же ключ для шифрования и расшифровки. Быстрое, но требует безопасной передачи ключа.

Популярные алгоритмы:

  • AES (Advanced Encryption Standard) — современный стандарт, очень надёжный
  • DES (Data Encryption Standard) — устаревший, но исторически значимый
  • 3DES — улучшенная версия DES, сейчас вытесняется AES

Пример на Java:

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;

public class SymmetricEncryption {
    public static void main(String[] args) throws Exception {
        // Генерируем 256-битный ключ для AES
        KeyGenerator keyGen = KeyGenerator.getInstance("AES");
        keyGen.init(256);
        SecretKey key = keyGen.generateKey();
        
        // Создаём Cipher
        Cipher cipher = Cipher.getInstance("AES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        
        String plaintext = "Секретное сообщение";
        byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
        String encrypted = Base64.getEncoder().encodeToString(encryptedBytes);
        
        System.out.println("Зашифровано: " + encrypted);
        
        // Расшифровка
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encrypted));
        String decrypted = new String(decryptedBytes);
        
        System.out.println("Расшифровано: " + decrypted);
    }
}

2. Асимметричное шифрование (криптография с открытым ключом)

Использует пару ключей: публичный ключ (для шифрования) и приватный ключ (для расшифровки). Медленнее симметричного, но не требует безопасной передачи ключа.

Популярные алгоритмы:

  • RSA — самый распространённый
  • ECC (Elliptic Curve Cryptography) — более эффективный, требует меньше ресурсов

Пример на Java:

import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;

public class AsymmetricEncryption {
    public static void main(String[] args) throws Exception {
        // Генерируем пару ключей (публичный и приватный)
        KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
        keyGen.initialize(2048); // размер ключа в битах
        KeyPair keyPair = keyGen.generateKeyPair();
        
        PublicKey publicKey = keyPair.getPublic();
        PrivateKey privateKey = keyPair.getPrivate();
        
        // Шифрование с публичным ключом
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        
        String plaintext = "Конфиденциальная информация";
        byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes());
        String encrypted = Base64.getEncoder().encodeToString(encryptedBytes);
        
        System.out.println("Зашифровано: " + encrypted);
        
        // Расшифровка с приватным ключом
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encrypted));
        String decrypted = new String(decryptedBytes);
        
        System.out.println("Расшифровано: " + decrypted);
    }
}

Применение в Java приложениях

  1. Защита данных в покое — шифрование конфиденциальных полей в БД
  2. Защита данных в пути — HTTPS, шифрованное соединение с API
  3. Цифровые подписи — проверка подлинности сообщений
  4. Двухфакторная аутентификация — защита учётных записей
  5. Защита переменных окружения — шифрование секретных параметров

Лучшие практики

  • Используйте надёжные алгоритмы: AES для симметричного, RSA/ECC для асимметричного
  • Правильная длина ключей: минимум 128 бит для AES, 2048 бит для RSA
  • Безопасное хранение ключей: не жёсткодируйте, используйте Key Management Systems
  • Регулярно обновляйте: не используйте устаревшие алгоритмы (DES, MD5)
  • Тестируйте безопасность: проводите security audits и penetration testing

Отличие от хеширования

Часто путают шифрование с хешированием. Вот ключевое отличие:

  • Шифрование — обратимый процесс (можно расшифровать)
  • Хеширование — необратимый процесс (нельзя восстановить исходные данные)

Хеширование используется для паролей, хеширование используется для проверки целостности данных.

Шифрование — это наиболее фундаментальный инструмент для обеспечения конфиденциальности и безопасности в современных IT-системах.

Что такое шифрование? | PrepBro