Java for Beginner
675 subscribers
548 photos
155 videos
12 files
839 links
Канал от новичков для новичков!
Изучайте Java вместе с нами!
Здесь мы обмениваемся опытом и постоянно изучаем что-то новое!

Наш YouTube канал - https://www.youtube.com/@Java_Beginner-Dev

Наш канал на RUTube - https://rutube.ru/channel/37896292/
Download Telegram
Java Crypto API

Классы Cipher и KeyGenerator

1. Класс Cipher (шифрование и дешифрование)
Класс Cipher является основным инструментом для шифрования и дешифрования данных в Java. Он поддерживает различные алгоритмы шифрования, такие как AES, DES, RSA и другие.

Как работает Cipher под капотом?
Cipher использует провайдеры безопасности (Security Providers), которые реализуют конкретные алгоритмы шифрования. Например, провайдер SunJCE предоставляет реализации AES, DES и других алгоритмов.
Внутри Cipher использует режимы шифрования (например, ECB, CBC, GCM) и дополнительные параметры (например, векторы инициализации).

Класс работает в трех режимах:
Шифрование (ENCRYPT_MODE).
Дешифрование (DECRYPT_MODE).
Обертывание ключей (WRAP_MODE).


Основные методы Cipher

getInstance(String transformation): Создает экземпляр Cipher для указанного алгоритма и режима (например, "AES/CBC/PKCS5Padding").
init(int opmode, Key key): Инициализирует Cipher для шифрования или дешифрования с использованием ключа.
doFinal(byte[] input): Выполняет шифрование или дешифрование данных.
update(byte[] input): Обновляет данные для пошаговой обработки (полезно для больших данных).


Пример использования Cipher
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;

public class CipherExample {
public static void main(String[] args) throws Exception {
// Генерация ключа
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128); // 128-битный ключ
SecretKey secretKey = keyGen.generateKey();

// Создание Cipher для AES
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);

// Шифрование данных
String originalText = "Hello, Java Crypto!";
byte[] encryptedBytes = cipher.doFinal(originalText.getBytes());
System.out.println("Encrypted: " + Base64.getEncoder().encodeToString(encryptedBytes));

// Дешифрование данных
cipher.init(Cipher.DECRYPT_MODE, secretKey);
byte[] decryptedBytes = cipher.doFinal(encryptedBytes);
System.out.println("Decrypted: " + new String(decryptedBytes));
}
}


Плюсы и минусы Cipher

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


Минусы
Требует правильной настройки параметров (например, режима и вектора инициализации).
Может быть сложным для новичков.


2. Класс KeyGenerator (генерация симметричных ключей)
Класс KeyGenerator используется для генерации симметричных ключей, которые применяются в алгоритмах шифрования, таких как AES, DES и других.

Как работает KeyGenerator под капотом?
KeyGenerator использует криптографически безопасные генераторы случайных чисел (CSPRNG) для создания ключей.
Размер ключа зависит от алгоритма (например, 128, 192 или 256 бит для AES).

Основные методы KeyGenerator

getInstance(String algorithm): Создает экземпляр KeyGenerator для указанного алгоритма (например, "AES").
init(int keysize): Устанавливает размер ключа.
generateKey(): Генерирует симметричный ключ.


Пример использования KeyGenerator
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;

public class KeyGeneratorExample {
public static void main(String[] args) throws Exception {
// Создание KeyGenerator для AES
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256); // 256-битный ключ

// Генерация ключа
SecretKey secretKey = keyGen.generateKey();
System.out.println("Generated Key: " + Base64.getEncoder().encodeToString(secretKey.getEncoded()));
}
}


Плюсы и минусы KeyGenerator

Плюсы:
Простота генерации ключей.
Поддержка различных алгоритмов.


Минусы:
Ключи должны храниться безопасно (например, в KeyStore).
Не подходит для асимметричных ключей (для этого используется KeyPairGenerator)


#Java #Training #Medium #Java_Crypto_API #Cipher #KeyGenerator