Основы криптографии в Java
Асимметричная криптография
В асимметричной криптографии используются два ключа: публичный (для шифрования) и приватный (для дешифрования). Это решает проблему обмена ключами, но работает медленнее, чем симметричная криптография.
Основные алгоритмы:
RSA (Rivest-Shamir-Adleman):
Основан на сложности факторизации больших чисел.
Использует ключи длиной 1024, 2048 или 4096 бит.
Плюсы: безопасный обмен ключами.
Минусы: низкая скорость, ограниченный размер данных для шифрования.
ECC (Elliptic Curve Cryptography):
Использует математику эллиптических кривых для создания более коротких ключей при той же стойкости, что и RSA.
Плюсы: высокая эффективность, меньший размер ключей.
Минусы: сложность реализации.
Пример шифрования с использованием RSA в Java:
Основные понятия
Шифрование и дешифрование:
Шифрование — процесс преобразования открытого текста в зашифрованный.
Дешифрование — обратный процесс, преобразование зашифрованного текста в открытый.
Ключи:
Публичный ключ: Используется для шифрования, может быть передан кому угодно.
Приватный ключ: Используется для дешифрования, должен храниться в секрете.
Безопасность
Уязвимости:
Слабые ключи: Короткие или предсказуемые ключи могут быть взломаны методом перебора.
Атаки на реализацию: Например, атака по времени (timing attack) на RSA.
Социальная инженерия: Кража ключей через фишинг или другие методы.
#Java #Training #Medium #Crypto #Asymmetrical
Асимметричная криптография
В асимметричной криптографии используются два ключа: публичный (для шифрования) и приватный (для дешифрования). Это решает проблему обмена ключами, но работает медленнее, чем симметричная криптография.
Основные алгоритмы:
RSA (Rivest-Shamir-Adleman):
Основан на сложности факторизации больших чисел.
Использует ключи длиной 1024, 2048 или 4096 бит.
Плюсы: безопасный обмен ключами.
Минусы: низкая скорость, ограниченный размер данных для шифрования.
ECC (Elliptic Curve Cryptography):
Использует математику эллиптических кривых для создания более коротких ключей при той же стойкости, что и RSA.
Плюсы: высокая эффективность, меньший размер ключей.
Минусы: сложность реализации.
Пример шифрования с использованием RSA в Java:
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Base64;
public class RSAExample {
public static void main(String[] args) throws Exception {
// Генерация ключей
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048); // 2048-bit key
KeyPair keyPair = keyGen.generateKeyPair();
// Шифрование
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
String plainText = "Hello, World!";
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("Encrypted: " + encryptedText);
// Дешифрование
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("Decrypted: " + decryptedText);
}
}
Основные понятия
Шифрование и дешифрование:
Шифрование — процесс преобразования открытого текста в зашифрованный.
Дешифрование — обратный процесс, преобразование зашифрованного текста в открытый.
Ключи:
Публичный ключ: Используется для шифрования, может быть передан кому угодно.
Приватный ключ: Используется для дешифрования, должен храниться в секрете.
Безопасность
Уязвимости:
Слабые ключи: Короткие или предсказуемые ключи могут быть взломаны методом перебора.
Атаки на реализацию: Например, атака по времени (timing attack) на RSA.
Социальная инженерия: Кража ключей через фишинг или другие методы.
#Java #Training #Medium #Crypto #Asymmetrical
Что выведет код в консоль?
#Tasks
import java.io.FileWriter;
import java.io.IOException;
public class Task200225 {
public static void main(String[] args) {
try (FileWriter writer = new FileWriter("output.txt")) {
writer.write("Hello");
writer.flush();
writer.write(" World");
} catch (IOException e) {
e.printStackTrace();
}
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Что такое transient в Java?
Что такое transient в Java?
Anonymous Quiz
2%
Тип данных
80%
Обозначение переменных, которые не сериализуются
11%
Модификатор доступа
7%
Интерфейс
Основы криптографии в Java: Асимметричная криптография
Асимметричная криптография, также известная как криптография с открытым ключом, использует два ключа: публичный ключ (для шифрования) и приватный ключ (для дешифрования). Это решает проблему обмена ключами, которая существует в симметричной криптографии, но работает медленнее.
Алгоритмы асимметричной криптографии
1. RSA (Rivest-Shamir-Adleman)
RSA — это один из самых популярных алгоритмов асимметричной криптографии. Он основан на сложности факторизации больших чисел.
Особенности:
Использует ключи длиной 1024, 2048 или 4096 бит.
Шифрование и дешифрование выполняются с помощью операций возведения в степень по модулю.
Публичный ключ: (e,n), приватный ключ: (d,n) где n=p×q (произведение двух больших простых чисел).
Плюсы:
Безопасный обмен ключами.
Широкое применение в SSL/TLS, цифровых подписях.
Минусы:
Низкая скорость по сравнению с симметричной криптографией.
Ограниченный размер данных для шифрования (обычно меньше размера ключа).
2. ECC (Elliptic Curve Cryptography)
ECC использует математику эллиптических кривых для создания более коротких ключей при той же стойкости, что и RSA.
Особенности:
Использует ключи длиной 256, 384 или 521 бит.
Основан на сложности задачи дискретного логарифмирования на эллиптических кривых.
Публичный ключ: точка на кривой Q=d×G, приватный ключ: число d.
Плюсы:
Высокая эффективность, меньший размер ключей.
Подходит для устройств с ограниченными ресурсами (например, IoT).
Минусы:
Сложность реализации.
Меньшая распространенность по сравнению с RSA.
Этапы работы RSA
Генерация ключей:
Выбираются два больших простых числа p и q.
Вычисляется n=p×q (модуль).
Вычисляется функция Эйлера ϕ(n)=(p−1)(q−1).
Выбирается число e (публичная экспонента), такое что 1<e<ϕ(n) и НОД(e,ϕ(n))=1.
Вычисляется число d (приватная экспонента), такое что d×e≡1(mod ϕ(n)).
Публичный ключ: (e,n), приватный ключ: (d,n).
Шифрование:
Сообщение m преобразуется в число M, где 0≤M<n.
Зашифрованное сообщение C=M^e (mod n).
Дешифрование:
Расшифрованное сообщение M=C^d(mod n).
Пример работы RSA
Простые числа: p=61, q=53.
Модуль: n=61×53=3233.
Функция Эйлера: ϕ(n)=(61−1)(53−1)=3120.
Публичная экспонента: e=17 (выбрано так, что НОД(17, 3120)=1.
Приватная экспонента: d=2753 (так как 17×2753≡1 (mod 3120)).
Шифрование сообщения m=123: C=123^17 (mod 3233)=855.
Дешифрование: M=855^2753 (mod 3233)=123.
Пример шифрования с использованием RSA в Java
#Java #Training #Medium #Crypto #Asymmetrical
Асимметричная криптография, также известная как криптография с открытым ключом, использует два ключа: публичный ключ (для шифрования) и приватный ключ (для дешифрования). Это решает проблему обмена ключами, которая существует в симметричной криптографии, но работает медленнее.
Алгоритмы асимметричной криптографии
1. RSA (Rivest-Shamir-Adleman)
RSA — это один из самых популярных алгоритмов асимметричной криптографии. Он основан на сложности факторизации больших чисел.
Особенности:
Использует ключи длиной 1024, 2048 или 4096 бит.
Шифрование и дешифрование выполняются с помощью операций возведения в степень по модулю.
Публичный ключ: (e,n), приватный ключ: (d,n) где n=p×q (произведение двух больших простых чисел).
Плюсы:
Безопасный обмен ключами.
Широкое применение в SSL/TLS, цифровых подписях.
Минусы:
Низкая скорость по сравнению с симметричной криптографией.
Ограниченный размер данных для шифрования (обычно меньше размера ключа).
2. ECC (Elliptic Curve Cryptography)
ECC использует математику эллиптических кривых для создания более коротких ключей при той же стойкости, что и RSA.
Особенности:
Использует ключи длиной 256, 384 или 521 бит.
Основан на сложности задачи дискретного логарифмирования на эллиптических кривых.
Публичный ключ: точка на кривой Q=d×G, приватный ключ: число d.
Плюсы:
Высокая эффективность, меньший размер ключей.
Подходит для устройств с ограниченными ресурсами (например, IoT).
Минусы:
Сложность реализации.
Меньшая распространенность по сравнению с RSA.
Этапы работы RSA
Генерация ключей:
Выбираются два больших простых числа p и q.
Вычисляется n=p×q (модуль).
Вычисляется функция Эйлера ϕ(n)=(p−1)(q−1).
Выбирается число e (публичная экспонента), такое что 1<e<ϕ(n) и НОД(e,ϕ(n))=1.
Вычисляется число d (приватная экспонента), такое что d×e≡1(mod ϕ(n)).
Публичный ключ: (e,n), приватный ключ: (d,n).
Шифрование:
Сообщение m преобразуется в число M, где 0≤M<n.
Зашифрованное сообщение C=M^e (mod n).
Дешифрование:
Расшифрованное сообщение M=C^d(mod n).
Пример работы RSA
Простые числа: p=61, q=53.
Модуль: n=61×53=3233.
Функция Эйлера: ϕ(n)=(61−1)(53−1)=3120.
Публичная экспонента: e=17 (выбрано так, что НОД(17, 3120)=1.
Приватная экспонента: d=2753 (так как 17×2753≡1 (mod 3120)).
Шифрование сообщения m=123: C=123^17 (mod 3233)=855.
Дешифрование: M=855^2753 (mod 3233)=123.
Пример шифрования с использованием RSA в Java
import javax.crypto.Cipher;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.util.Base64;
public class RSAExample {
public static void main(String[] args) throws Exception {
// Генерация ключей
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048); // 2048-bit key
KeyPair keyPair = keyGen.generateKeyPair();
// Шифрование
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
String plainText = "Hello, World!";
byte[] encryptedBytes = cipher.doFinal(plainText.getBytes());
String encryptedText = Base64.getEncoder().encodeToString(encryptedBytes);
System.out.println("Encrypted: " + encryptedText);
// Дешифрование
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedText));
String decryptedText = new String(decryptedBytes);
System.out.println("Decrypted: " + decryptedText);
}
}
#Java #Training #Medium #Crypto #Asymmetrical
Уязвимости асимметричной криптографии
Атака на слабые ключи:
Если p и q слишком близки, можно быстро факторизовать n.
Решение: Использование стойких ключей (например, 2048 бит для RSA).
Атака по времени (Timing Attack):
Измерение времени выполнения операций может раскрыть приватный ключ.
Решение: Использование алгоритмов с постоянным временем выполнения.
Атака на короткие сообщения:
Если сообщение слишком короткое, его можно восстановить без ключа.
Решение: Использование padding (например, OAEP).
Когда использовать асимметричную криптографию?
Асимметричная криптография идеально подходит для:
Безопасного обмена ключами (например, в SSL/TLS).
Цифровых подписей и аутентификации.
Ситуаций, где безопасный обмен ключами невозможен.
#Java #Training #Medium #Crypto #Asymmetrical
Атака на слабые ключи:
Если p и q слишком близки, можно быстро факторизовать n.
Решение: Использование стойких ключей (например, 2048 бит для RSA).
Атака по времени (Timing Attack):
Измерение времени выполнения операций может раскрыть приватный ключ.
Решение: Использование алгоритмов с постоянным временем выполнения.
Атака на короткие сообщения:
Если сообщение слишком короткое, его можно восстановить без ключа.
Решение: Использование padding (например, OAEP).
Когда использовать асимметричную криптографию?
Асимметричная криптография идеально подходит для:
Безопасного обмена ключами (например, в SSL/TLS).
Цифровых подписей и аутентификации.
Ситуаций, где безопасный обмен ключами невозможен.
#Java #Training #Medium #Crypto #Asymmetrical
Основы криптографии
Хэш-функции (SHA-256, MD5)
Хэш-функция — это алгоритм, который принимает произвольные данные и генерирует фиксированную строку (хэш).
Основные свойства хэша:
Детерминированность – одно и то же входное значение всегда даёт одинаковый результат.
Скорость – быстрый расчёт хэша.
Устойчивость к коллизиям – два разных входных значения не должны давать одинаковый хэш.
MD5 – устаревший алгоритм
Разработан в 1991 году Рональдом Ривестом.
Размер хэша: 128 бит (32 символа в шестнадцатеричном формате).
Уязвим для атак на коллизии – можно подобрать два разных входных значения с одинаковым хэшем.
Используется только для контрольных сумм (например, проверки целостности файлов).
Как работает MD5 под капотом?
Разделяет сообщение на блоки по 512 бит.
Добавляет бит 1 в конец данных, затем дополняет нулями до 448 бит.
Добавляет 64-битное представление длины исходного сообщения.
Применяет 4 раунда нелинейных преобразований (циклические сдвиги, XOR, сложение по модулю 2³²).
Получает 128-битный хэш.
Пример MD5 в Java
SHA-256
Разработан NSA в 1993 году как часть SHA-2.
Размер хэша: 256 бит (64 символа в шестнадцатеричном формате).
Безопасен на 2025 год, поскольку коллизии не найдены.
Используется в блокчейне, цифровых подписях, аутентификации пользователей.
Как работает SHA-256 под капотом?
Разбивает данные на 512-битные блоки.
Добавляет padding, как в MD5.
Инициализирует 8 переменных (A–H) с фиксированными значениями.
Выполняет 64 раунда преобразований, используя битовые сдвиги, XOR и сложение по модулю 2³².
Возвращает 256-битный (32-байтовый) хэш.
Пример SHA-256 в Java
Цифровые подписи
Цифровая подпись – это криптографическая технология, обеспечивающая:
Аутентификацию – доказывает, что данные создал именно этот отправитель.
Целостность – если данные изменятся, подпись станет недействительной.
Неотрекаемость – автор не может отрицать, что подписал документ.
Как работает цифровая подпись?
Отправитель хэширует данные (обычно SHA-256).
Этот хэш шифруется приватным ключом (RSA/ECDSA).
Подпись отправляется вместе с оригинальными данными.
Получатель проверяет подпись с помощью публичного ключа.
Пример цифровой подписи (RSA) в Java
#Java #Training #Medium #Crypto #Hash #MD5 #SHA_256
Хэш-функции (SHA-256, MD5)
Хэш-функция — это алгоритм, который принимает произвольные данные и генерирует фиксированную строку (хэш).
Основные свойства хэша:
Детерминированность – одно и то же входное значение всегда даёт одинаковый результат.
Скорость – быстрый расчёт хэша.
Устойчивость к коллизиям – два разных входных значения не должны давать одинаковый хэш.
MD5 – устаревший алгоритм
Разработан в 1991 году Рональдом Ривестом.
Размер хэша: 128 бит (32 символа в шестнадцатеричном формате).
Уязвим для атак на коллизии – можно подобрать два разных входных значения с одинаковым хэшем.
Используется только для контрольных сумм (например, проверки целостности файлов).
Как работает MD5 под капотом?
Разделяет сообщение на блоки по 512 бит.
Добавляет бит 1 в конец данных, затем дополняет нулями до 448 бит.
Добавляет 64-битное представление длины исходного сообщения.
Применяет 4 раунда нелинейных преобразований (циклические сдвиги, XOR, сложение по модулю 2³²).
Получает 128-битный хэш.
Пример MD5 в Java
import java.security.MessageDigest;
public class MD5Example {
public static void main(String[] args) throws Exception {
String input = "Hello, world!";
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] hash = md.digest(input.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
System.out.println("MD5 Hash: " + hexString.toString());
}
}
SHA-256
Разработан NSA в 1993 году как часть SHA-2.
Размер хэша: 256 бит (64 символа в шестнадцатеричном формате).
Безопасен на 2025 год, поскольку коллизии не найдены.
Используется в блокчейне, цифровых подписях, аутентификации пользователей.
Как работает SHA-256 под капотом?
Разбивает данные на 512-битные блоки.
Добавляет padding, как в MD5.
Инициализирует 8 переменных (A–H) с фиксированными значениями.
Выполняет 64 раунда преобразований, используя битовые сдвиги, XOR и сложение по модулю 2³².
Возвращает 256-битный (32-байтовый) хэш.
Пример SHA-256 в Java
import java.security.MessageDigest;
public class SHA256Example {
public static void main(String[] args) throws Exception {
String input = "Hello, world!";
MessageDigest sha = MessageDigest.getInstance("SHA-256");
byte[] hash = sha.digest(input.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
System.out.println("SHA-256 Hash: " + hexString.toString());
}
}
Цифровые подписи
Цифровая подпись – это криптографическая технология, обеспечивающая:
Аутентификацию – доказывает, что данные создал именно этот отправитель.
Целостность – если данные изменятся, подпись станет недействительной.
Неотрекаемость – автор не может отрицать, что подписал документ.
Как работает цифровая подпись?
Отправитель хэширует данные (обычно SHA-256).
Этот хэш шифруется приватным ключом (RSA/ECDSA).
Подпись отправляется вместе с оригинальными данными.
Получатель проверяет подпись с помощью публичного ключа.
Пример цифровой подписи (RSA) в Java
import java.security.*;
public class DigitalSignatureExample {
public static void main(String[] args) throws Exception {
// Генерация ключей
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair pair = keyGen.generateKeyPair();
Signature signature = Signature.getInstance("SHA256withRSA");
signature.initSign(pair.getPrivate());
String data = "Important message";
signature.update(data.getBytes());
byte[] signedData = signature.sign();
// Проверка подписи
signature.initVerify(pair.getPublic());
signature.update(data.getBytes());
boolean isValid = signature.verify(signedData);
System.out.println("Подпись действительна? " + isValid);
}
}
#Java #Training #Medium #Crypto #Hash #MD5 #SHA_256
Что выведет код?
#Tasks
class Alfa {
void print(Alfa obj) {
System.out.println("A");
}
}
class Beta extends Alfa {
void print(Beta obj) {
System.out.println("B");
}
}
public class Task210225 {
public static void main(String[] args) {
Alfa obj1 = new Beta();
Alfa obj2 = new Alfa();
obj1.print(obj2);
}
}
#Tasks
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопросы с собеседования 👩💻
Какой метод используется для запуска потока?
Какой метод используется для запуска потока?
Anonymous Quiz
42%
start()
46%
run()
10%
execute()
2%
launch()
Основы криптографии
Соль (Salt) и вектор инициализации (IV)
Соль – это случайные данные, добавляемые к паролю перед хэшированием, чтобы защитить его от атак по готовым радужным таблицам.
Как работает соль?
При создании пароля генерируется уникальная соль (обычно 16 байт).
К паролю добавляется соль, и уже затем вычисляется хэш.
При проверке пароля используется та же соль.
Пример генерации соли в Java
Вектор инициализации (IV) – это случайные данные, добавляемые к первому блоку шифрованного текста, чтобы предотвратить повторяемость результатов.
IV необходим в блочных шифрах (AES, DES) для режимов CBC, GCM.
Он не секретен, но должен быть уникальным для каждого зашифрованного сообщения.
Генерация IV в Java
Режимы шифрования (ECB, CBC, GCM)
AES (Advanced Encryption Standard) – это блочный алгоритм, работающий с блоками 128 бит (16 байт).
Основные режимы работы AES:
ECB (Electronic Codebook) -> Каждый блок шифруется отдельно -> Уязвим – одинаковые блоки дают одинаковый результат
CBC (Cipher Block Chaining) -> Каждый блок XOR'ится с предыдущим перед шифрованием -> Устойчив к повторяемости, но уязвим к атаке "padding oracle"
GCM (Galois Counter Mode) -> Использует счётчик вместо цепочки блоков, добавляя аутентификацию -> Лучший вариант – быстрый, безопасный, предотвращает подмену
Почему ECB – плохой вариант?
ECB небезопасен, потому что одинаковые блоки данных дают одинаковый зашифрованный результат. Это делает возможной атаку на шаблоны в данных.
Пример ECB в Java
CBC – более безопасный вариант
CBC использует IV, который предотвращает повторяемость.
Пример AES-CBC в Java
#Java #Training #Medium #Crypto #Salt #IV #ECB #CBC #GCM #AES_256
Соль (Salt) и вектор инициализации (IV)
Соль – это случайные данные, добавляемые к паролю перед хэшированием, чтобы защитить его от атак по готовым радужным таблицам.
Как работает соль?
При создании пароля генерируется уникальная соль (обычно 16 байт).
К паролю добавляется соль, и уже затем вычисляется хэш.
При проверке пароля используется та же соль.
Пример генерации соли в Java
import java.security.SecureRandom;
import java.util.Base64;
public class SaltExample {
public static void main(String[] args) {
byte[] salt = new byte[16]; // 16 байт соли
new SecureRandom().nextBytes(salt);
System.out.println("Сгенерированная соль: " + Base64.getEncoder().encodeToString(salt));
}
}
Вектор инициализации (IV) – это случайные данные, добавляемые к первому блоку шифрованного текста, чтобы предотвратить повторяемость результатов.
IV необходим в блочных шифрах (AES, DES) для режимов CBC, GCM.
Он не секретен, но должен быть уникальным для каждого зашифрованного сообщения.
Генерация IV в Java
import java.security.SecureRandom;
import java.util.Base64;
public class IVExample {
public static void main(String[] args) {
byte[] iv = new byte[16]; // IV должен быть 16 байт для AES
new SecureRandom().nextBytes(iv);
System.out.println("Сгенерированный IV: " + Base64.getEncoder().encodeToString(iv));
}
}
Режимы шифрования (ECB, CBC, GCM)
AES (Advanced Encryption Standard) – это блочный алгоритм, работающий с блоками 128 бит (16 байт).
Основные режимы работы AES:
ECB (Electronic Codebook) -> Каждый блок шифруется отдельно -> Уязвим – одинаковые блоки дают одинаковый результат
CBC (Cipher Block Chaining) -> Каждый блок XOR'ится с предыдущим перед шифрованием -> Устойчив к повторяемости, но уязвим к атаке "padding oracle"
GCM (Galois Counter Mode) -> Использует счётчик вместо цепочки блоков, добавляя аутентификацию -> Лучший вариант – быстрый, безопасный, предотвращает подмену
Почему ECB – плохой вариант?
ECB небезопасен, потому что одинаковые блоки данных дают одинаковый зашифрованный результат. Это делает возможной атаку на шаблоны в данных.
Пример ECB в Java
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.util.Base64;
public class ECBExample {
public static void main(String[] args) throws Exception {
String plaintext = "AAAAAAAAAAAAAAAAAAAAAAAA"; // 24 байта - два одинаковых блока
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey key = keyGen.generateKey();
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] encrypted = cipher.doFinal(plaintext.getBytes());
System.out.println("Зашифрованный текст (ECB): " + Base64.getEncoder().encodeToString(encrypted));
}
}
Использовать ECB не рекомендуется!
CBC – более безопасный вариант
CBC использует IV, который предотвращает повторяемость.
Пример AES-CBC в Java
import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class CBCExample {
public static void main(String[] args) throws Exception {
String plaintext = "Hello, Secure World!";
byte[] key = new byte[16]; // 128-битный ключ
byte[] iv = new byte[16]; // IV
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec);
byte[] encrypted = cipher.doFinal(plaintext.getBytes());
System.out.println("Зашифрованные данные (CBC): " + Base64.getEncoder().encodeToString(encrypted));
}
}
#Java #Training #Medium #Crypto #Salt #IV #ECB #CBC #GCM #AES_256
GCM – лучший вариант
GCM добавляет аутентификацию (AEAD), предотвращая подмену данных.
Пример AES-GCM в Java
Современные алгоритмы шифрования
AES-256 (Advanced Encryption Standard)
Симметричный алгоритм (один ключ).
Очень быстрый и безопасный.
Используется в VPN, TLS, защищённых хранилищах.
RSA-4096
Асимметричный алгоритм (пара ключей).
Высокая безопасность, но медленный.
Используется для шифрования ключей, цифровых подписей.
Размер ключа должен быть не менее 2048 бит.
ECC (Elliptic Curve Cryptography)
Современнее RSA – обеспечивает такую же безопасность при меньшем размере ключа.
ECC-256 = безопасность RSA-3072.
Используется в блокчейне, криптовалютах, мобильных устройствах.
#Java #Training #Medium #Crypto #Salt #IV #ECB #CBC #GCM #AES_256
GCM добавляет аутентификацию (AEAD), предотвращая подмену данных.
Пример AES-GCM в Java
import javax.crypto.*;
import javax.crypto.spec.GCMParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class AESGCMExample {
public static void main(String[] args) throws Exception {
String plaintext = "Hello, Secure World!";
byte[] key = new byte[16];
byte[] iv = new byte[12];
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, gcmSpec);
byte[] encrypted = cipher.doFinal(plaintext.getBytes());
System.out.println("Зашифрованные данные (GCM): " + Base64.getEncoder().encodeToString(encrypted));
}
}
GCM – самый защищённый вариант!
Современные алгоритмы шифрования
AES-256 (Advanced Encryption Standard)
Симметричный алгоритм (один ключ).
Очень быстрый и безопасный.
Используется в VPN, TLS, защищённых хранилищах.
RSA-4096
Асимметричный алгоритм (пара ключей).
Высокая безопасность, но медленный.
Используется для шифрования ключей, цифровых подписей.
Размер ключа должен быть не менее 2048 бит.
ECC (Elliptic Curve Cryptography)
Современнее RSA – обеспечивает такую же безопасность при меньшем размере ключа.
ECC-256 = безопасность RSA-3072.
Используется в блокчейне, криптовалютах, мобильных устройствах.
#Java #Training #Medium #Crypto #Salt #IV #ECB #CBC #GCM #AES_256
Всем привет! 👋
Как пережили эту неделю?🥴
А я решил (если звезды сложатся) порадовать Вас завтра разбором интересного приложения которое однозначно будет встречаться в будущих проектах - Redis!
⚠️ Что разберем:
➡️ Что такое Redis и зачем он вообще нам сдался.
➡️ Как его установить и запустить, поработаем с ним из консоли.
➡️ Внедрим Redis в простое действующее Spring приложение и проведем полевые испытания
➡️ Сделаем пару элементарных ошибок в коде и поищем их с полчаса🤣
Жду как всегда всех👨💻
А всем остальным просто замечательных выходных!🍸
Как пережили эту неделю?
А я решил (если звезды сложатся) порадовать Вас завтра разбором интересного приложения которое однозначно будет встречаться в будущих проектах - Redis!
Жду как всегда всех
А всем остальным просто замечательных выходных!
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Всех причастных!💪🫡